먼저 int와 Integer의 차이점에 대해 이야기해 보겠습니다.
int는 기본 데이터 유형이고 Integer는 int의 래퍼 클래스입니다. 참고: 후자의 유형은 "class"입니다. 예를 들어 제네릭을 사용하면 List
int의 초기 값은 0이고 정수는 null입니다.
아래의 구체적인 예를 보세요:
package syswar.cc; public class IntegerCompare { public static void main(String[] args) { // TODO Auto-generated method stub Integer a1 = 2; Integer a2 = 2; Integer b1 = 150; Integer b2 = 150; Integer c1 = new Integer(2); Integer c2 = new Integer(2); Integer d1 = new Integer(150); Integer d2 = new Integer(150); System.out.println("a1==a2?" + (a1==a2)); System.out.println("b1==b2?" + (b1==b2)); System.out.println("c1==c2?" + (c1==c2)); System.out.println("d1==d2?" + (d1==d2)); } }
실행 결과:
a1==a2?true b1==b2?false c1==c2?false d1==d2?false>
왜 이런 결과가 나오나요? 먼저 두 그룹 a와 b를 비교해 보겠습니다. Integer가 초기화되면 이러한 Integer 객체에 해당하는 int 값이 바이트 범위, 즉 [-128,127]에 있습니다.
Integer에 직접 int 값을 할당할 때 값 범위가 [-128,127]이면 Integer는 캐시에서 Integer 객체를 직접 검색합니다. 따라서 직접 할당한 int 값이 [-128,127]에 있는 경우에는 동일한 객체에 대한 Integer 객체.
new 메소드를 통해 얻은 Integer 객체는 힙에서 직접 할당된 객체이므로 특정 int 값이 무엇이든 == 판단 결과는 거짓입니다