Java String의 특이한 합연산 -(null + "str")에 대하여-

QNamelessQ·2023년 1월 5일
0

Java

목록 보기
3/3

일반적으로 객체 생성이 되지 않은 인스턴스와 연산을 하게 된다면
NullPointerException(이하 NPE)을 맞닥뜨리게 될 것이다.

예를 들어 wrapper class의 Integer로만 계산하더라도 그렇다

public class Tmp {
    public static void main(String[] args) {
        Integer a = 12;
        Integer b = null;

        System.out.println(a + b);
    }
}

/*
Exception in thread "main" java.lang.NullPointerException
        at Tmp.main(Tmp.java:6)
*/

하지만 String의 경우 값이 null인 변수와 합연산을 시도할 경우,
NPE가 아닌 "null" + "str"의 결과값이 도출되는데 왜 그런 것일까?

public class Tmp {
    public static void main(String[] args) {
        String a = "안녕";
        String tmp = null;

        System.out.println(null + tmp + e);
    }
}

/*
nullnull안녕
*/


풀이

String valueOf()

+ 연산을 시도할 경우
내부적으로 String.valueOf()를 호출하여 연산을 시도하는데

이때, valueOf()의 반환값은 다음과 같다

즉, 값이 null이면 그냥 "null"이라는 문자열로 반환해준다.


실제로 코드가 돌아가는 것을 확인해보고 싶다면
vscode 기준으로 아래 코드를 디버깅 모드에서
f11과 f10을 번갈아가며 누르면서 무슨 함수가 호출되는지 확인해보자

String a = "Hello ";
String b = "World";
String c = a + b; // 리터럴로 입력 시, 함수 호출을 보여주지 않음


References

https://velog.io/@kms8571/Null-String-Concatening

profile
Hello World

0개의 댓글