자바에서 null 관련된 테스트를 해보았다.



@Test

public void Test() {

Map numberAndCount = new HashMap<>();


int[] numbers = {1, 2, 3, 1};

for(int i : numbers){

Integer count = (Integer) numberAndCount.get(i);

numberAndCount.put(i, count++);

}

}



위의 코드는 numberAndCount 맵에서 count를 저장할 때, null인 count를 ++ 하면서 NPE가 발생한다.


자바에서 null 값인 객체를 클래스 캐스트하면 에러가 발생하지 않고, 실제 객체를 사용하는 시점에 NPE가 발생한다.



좀 더 간단한 형태로 만들면 다음과 같다. 


Object object = null;

String o = (String) object;

o.concat("1"); // npe 발생



그외 관련한 테스트 코드는 다음과 같다.



1. null == null, 컴파일/런타임 에러 발생하지 않는다.


if (null == null) {

System.out.println("null");

}


2. primitve type에 null 할당시 컴파일 에러가 발생한다.


int a = null;



3. primitive boxing 시 런타임시 에러가 발생한다.


Integer integer = null;

int i0 = (int) integer; // npe


int a = (Integer) null;  //npe




Posted by 김용환 '김용환'

댓글을 달아 주세요