Home
Java
자바 정수형 비교 == vs equals (Integer Compare)
devfoxstar
devfoxstar
July 06, 2022
1 min

Table Of Contents

01
A == B
02
A.equals(B)
03
A.intValue() == B.intValue()
04
Integer

자바에서 정수 값을 비교 할 때, 은근히 헷갈리는 경우가 많습니다.
관련 내용을 간략하게 정리해 보겠습니다.


A == B

== 연산자는 원시타입을 비교할 때 사용합니다.
객체타입을 비교하면 결과 값은 무조건 false가 됩니다.

원시타입 = Primitive Type = int 
객체타입 = Wrapper Class = Integer
int A = 1000;
int B = 1000;

if (A == B)
    System.out.println(true);
else
    System.out.println(false);

Output - true

Integer 형일 경우 127 까지는 == 연산자로 처리 되지만, 128부터는 처리가 되지 않습니다.
자바에서 -128 ~ 127 사이의 Integer 값을 캐쉬하기 때문입니다.

Integer A = 127;
Integer B = 127;

if (A == B)
    System.out.println(true);
else
    System.out.println(false);

Output - true
Integer A = 128;
Integer B = 128;

if (A == B)
    System.out.println(true);
else
    System.out.println(false);

Output - false  

A.equals(B)

equals는 객체타입을 비교할 때 사용합니다.
그래서 원시타입을 비교하면 오류가 발생합니다.

Integer A = 1000;
Integer B = 1000;

if (A.equals(B))
    System.out.println(true);
else
    System.out.println(false);

Output - true

원시 타입 int를 비교하면 참조할 수 없다고 오류가 발생합니다.

int A = 1000;
int B = 1000;

if (A.equals(B))
    System.out.println(true);
else
    System.out.println(false);

Output - java: int cannot be dereferenced

A.intValue() == B.intValue()

객체타입을 원시타입으로 바꿔서 비교할 수도 있습니다.
하나의 값만 변환이 필요할 때 사용하면 유용한 방법입니다.

Integer A = 128;
Integer B = 128;

if (A.intValue() == B.intValue())
    System.out.println(true);
else
    System.out.println(false);

Output - true

Integer

추가로 Integer에 대해 알아보겠습니다.
동일한 Integer 형인데 new Integer()로 대입하면, 주소 값이 달라집니다.

Integer A = 127;
Integer B = new Integer(127);

if (A == B)
    System.out.println(true);
else
    System.out.println(false);

Output - false

만약, == 연산자를 쓰고 싶으면 Integer 대입 방식을 바꿔주면 됩니다.

Integer A = 127;
Integer B = Integer.valueOf(127);

if (A == B)
    System.out.println(true);
else
    System.out.println(false);

Output - true

근데 Integer는 == 연산자로 -128 ~ 127 사이만 비교가 가능합니다.
그냥 객체타입은 equals를 쓰는게 좋습니다.

Integer A = 128;
Integer B = new Integer(128);

if (A.equals(B))
    System.out.println(true);
else
    System.out.println(false);

Output - true

참고로 Integer(int)는 Java 버전 9부터 제거 대상입니다.
그래서 이제는 굳이 사용 할 이유가 없습니다.

해당 코드를 사용하면 친절한 안내 문구를 볼 수 있습니다.

Integer(int) is deprecated and marked for removal
Integer(int) is deprecated and marked for removal


Tags

#Java#Integer#equals

Related Posts

Java - Record class (불변 데이터 객체 만들기)
June 11, 2024
1 min
© 2024, All Rights Reserved.

Quick Links

About Me

Media