자바에서 Integer클래스는 어떻게 비교하죠?

음.. 예를 들어서

Integer a = 4;
if (a < 5)

이런 거는 auto boxing을 배워서 비교연산이 된다는건 알고있는데요. Integer와 int형은 비교 연산이 잘되지만 문제는 Integer와 Integer를 연산할때에요.

Integer a = 4;
Integer b = 5;

if (a == b)

위에 코드에서 a와 b가 같은 객체였을때 연산을 하게되면 결과는 true가 나오는데 이게 auto unboxing때문인지 아니면 객체가 같기때문인지 잘 모르겠습니다.

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    Integer나 Long같은 클래스에서 ==연산은 두 객체의 레퍼런스가 같은지를 비교하는 연산을 합니다.

    Integer x = ...;
    Integer y = ...;
    
    System.out.println(x == y);
    

    위와 같은 코드에서 x==y는 x와 y가 가리키고 있는 레퍼런스가 같은지를 비교하는거지 두 객체가 가진 숫자의 값을 비교하지는 않습니다. 그래서

    Integer x = new Integer(10);
    Integer y = new Integer(10);
    
    System.out.println(x == y);
    

    이런 연산을 했을때 결과는 false가 나오게 됩니다. 만약의 Integer에서 값을 비교하고 싶으시다면 equals()메소드나 intValue()메소드를 이용해서 비교를 하시면 됩니다.

    if (x.intValue() == y.intValue())
    if (x.equals(y))
    

    이런식으로 하시면 됩니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.