is Data.

java null은 Object객체다

Java null은 Object객체다

 

String str = null;
System.out.println(str);

 

위와 같은 코딩의 결과는 무엇일까?

정답은

 

--------------------------------------------

null

 

위처럼 문자열 null이 출력된다.

str + "A" 을 할 경우엔 'nullA' 가 출력된다.

 

흔히 null 은 아무것도 없는. 무상무념적인 존재인데 String 객체를 null로 초기화 한 후 출력한 결과는 문자열 null 이었다. 아곳은 null이 Object 객체이기 때문에 가능한 것이다.

객체이기 때문에 내부적으로 toString() 메서드를 호출할 수 있게된 것인데, 이것은 JVM의 암시적은 호출로만 가능하다.

 

null은 우리에겐 명시적으론 예약어이기 때문에 null이 객체라고 하여 우리가 직접 toString() 메서드를 호출 할 수 없다.

 

System.out.println( ( (Object)null ).toString() + "A";

 

위와 같은 코드는 NullPointerException을 발생시키게 된다. JVM의 암시적 호출과 달리 우리는 직접 메시지를 전달하려는 개념이기에 null객체가 메시지를 전달하게 되는 것이므로 당연한 결과라 할 수 있다.

 

String을 null로 초기화 하는경우 "" 공백으로 초기화 하는 경우보다 많은양의 처리를 요할경우 성능 향상에 도움이 되지만 큰 무리가 없다면 "" 공백으로 초기화 하는 것이 보다 편리하다.

 

실제 사용할 용도가 명확하지 String은 null로 초기화 하고 문자열 연산을 연산이 이루어질 문자열이라면 StringBuffer를 이용하는 것이 보다 효율적이라고 할 수 있다.

 

String s = null;

 

위와같이 사용하는 경우 s는 스택에 위치하게 됩니다. 반면 null이 아닌 "" 공백으로 초기화 한 경우, "" 공백은 힙에 자리하고 뒤이어서 s는 스택에 잡히게 됩니다. 이 경우 쓸데없는 힙메모리를 사용할 우려가 있고 이 String으로 반복된 연산을 하다보면 극단적인 경우 힙단편화를 초래할수도 있습니다.