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으로 반복된 연산을 하다보면 극단적인 경우 힙단편화를 초래할수도 있습니다.
'language > java' 카테고리의 다른 글
java Varags 가변인수 사용 예문 (0) | 2013.10.17 |
---|---|
java Enum 열거형 사용 (0) | 2013.10.17 |
java Generic 제너릭 사용 예시 (0) | 2013.10.17 |
java Vector 벡터의 add()메서드와 addElement()메서드 (0) | 2013.10.17 |
java 자바 API , 한글번역 API (0) | 2013.10.16 |