JAVA

[JAVA]null

당고개 2023. 11. 9. 00:57

null 이라는 것은 참조 자료형 변수만 선언하고 인스턴스의 참조 값이 저장되어 있지 않았을 때 기본적으로 null 값이 저장되어 있습니다.

 

case 1

String[] strArray = new String[3];

System.out.println(strArray[0]);
System.out.println(strArray[1]);
System.out.println(strArray[2]);

// null 
// null
// null

index를 이용하여 배열에 접근해보면 실제로 null이 출력됩니다.

 

case 2

String text = null;

System.out.println(text);

변수에 접근해보면 실제로 null이 출력됩니다.

 

case 3

만약에 Fruit 클래스가 존재하고 Fruit 참조 자료형 변수에 null 값을 저장했다고 가정해봅시다.

class Fruit {
    String name = "사과";
}
Fruit fruit = null;

System.out.println(fruit.name);

이와 같은 코드를 실행해보면 어떻게 될까요?

Fruit fruit 참조 자료형 변수에 Fruit 인스턴스의 참조값이 저장되어 있으면, Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근할 수 없고 NullPointerException이 발생합니다.

 

메서드와 매개변수와 null

class Person {

    String name = "김철수";

    public void setName(String name) {
        this.name = name;
    }
}
Person person = new Person();
person.setName(null);

메서드의 매개 변수가 참조 자료형인 경우 null 값을 전달할 수 있습니다. 이렇게 되면 name 변수는 null 값을 저장하게 됩니다. 메서드와 동일하게 생성자의 매개변수가 참조 자료형으로 선언되었을 경우도 동일합니다.

 

null 값을 확인하는 방법

null 값을 의도적으로 사용하기도 하고 의도적이지 않을 때도 있습니다. 의도적이든 비의도적이든 null 값을 확인할 필요가 있습니다. null==, 연산자를 이용하여 확인할 수 있습니다.

if (null == name) {
    // name 변수에 저장된 값이 null 값이다.
}

다음 예시입니다.

String[] strArray = new String[4];

strArray[0] = "1";
strArray[2] = "2";
strArray[3] = "3";

for (int i = 0; i < strArray.length; i++) {
    System.out.println(strArray[i]);
}

// 출력
// 1
// null
// 2
// 3

공간이 네 개인 String형 배열 인스턴스를 생성했습니다. 이러한 배열을 i는 0부터 배열의 크기전까지 순차적으로 배열의 내용을 읽는 코드입니다.

 

코드를 실행시키면 1, null, 2, 3이 출력됩니다. 만약에 null 값을 출력하고 싶지 않다면 어떻게 할까요?

String[] strArray = new String[4];

strArray[0] = "1";
strArray[2] = "2";
strArray[3] = "3";

for (int i = 0; i < strArray.length; i++) {
    if (null != strArray[i]) {
        System.out.println(strArray[i]);
    }
}

// 출력
// 1
// 2
// 3

조건문을 통해 null 값이 아닌 것만 확인하여 출력하면 됩니다.

 

 

 

 

 

 

 

출처 : https://www.codelatte.io/courses/java_programming_basic/AKQNMGWDZQ8F4URJ

'JAVA' 카테고리의 다른 글

[JAVA]enum  (0) 2023.11.15
[JAVA]예외처리  (0) 2023.11.10
[JAVA]Object 클래스  (0) 2023.11.07
[JAVA]람다 표현식  (2) 2023.10.31
[JAVA]익명 클래스  (0) 2023.10.31