자바에서 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
'java core' 카테고리의 다른 글
[java8] List 쪼개기 (split by fixed num) (0) | 2015.11.19 |
---|---|
java8 소스 보기 (0) | 2015.10.19 |
[java8] 배열을 java8 stream 처리하기 (0) | 2015.09.24 |
Java8의 ArrayList.subList()한후 Iterate시 ConcurrentModificationException 발생 (0) | 2015.08.08 |
Math.pow, 지수 비교 (Math.log, Math.getExponent) 공부 (0) | 2015.07.18 |