-
[매일읽기] Java Integer Cache — Why Integer.valueOf(127) == Integer.valueOf(127) Is True개발자 라이프/매일읽기 2020. 8. 8. 09:59반응형
자바의 2가지 타입
- primitive type :
- byte, char, short, int, float, double, long, boolean
- 메모리에 직접 값이 쓰임
- reference type :
- primitive type 외의 객체에 대한 타입
- 메모리 주소 값을 가지고 있음
- `==` 연산자로 비교할 경우 메모리 주소 값을 비교
문제 상황
Integer a = 128; // Compiler converts this line to Integer a = Integer.valueOf(128); Integer b = 128; // Compiler converts this line to Integer b = Integer.valueOf(128); System.out.println(a == b); // Output -- false Integer a = 127; // Compiler converts this line to Integer a = Integer.valueOf(127); Integer b = 127; // Compiler converts this line to Integer b = Integer.valueOf(127); System.out.println(a == b); // Output -- true
- reference type을 비교하는데, 각각 결과가 다름
IntegerCache
- IntegerCache는 특정 범위 내에서의 객체를 요청 받으면 항상 같은 객체(주소값)를 반환
- 기본 범위 -128~127
- 캐시의 범위는 `-XX:AutoBoxCacheMax` JVM 옵션으로 조정 가능
- ByteCache, ShortCache, CharacterCache 등도 있음 (범위 조정 불가)
읽고나서
- 캐시가 있다는 걸 처음 알았다.
- 잘 사용하면 좋지만 잘못 사용하면 독일 듯
반응형 - primitive type :