개발/JAVA

Java의 Integer, int 숫자 비교의 주의사항

신매력 2016. 3. 30. 16:23

예전에 프로그램에 버그가 있었고 원인을 한참을 못찾은적이 있었다.

숫자 비교하다 생긴 문제였고, 

무심코 코딩하다 틀리고 삽질할 수 있는 부분이라 블로그에 남겨본다.ㅎㅎ



아래는 숫자를 저장하는 3가지 방법이다.


int a = 1;

Integer b = 1;

Integer c = new Integer(1);



if (a == 1)     => true 

if (b == 1)     => true

if (c == 1)     => true  


a, b, c 모두 숫자 1인지 비교해보면 결과는 true이다.





그럼 변수끼리 비교해보겠음



1) int VS Integer


int a = 1;

Integer b = 1;


if (a == b)      => true



2) int VS Integer


int a = 1;

Integer c = new Integer(1);


if (a == c)      => true



3) Integer VS Integer


Integer b = 1;

Integer c = new Integer(1);


if (b == c)      => false 




비교 대상 중 primitive type(int) 의 변수가 하나라도 있다면, 

== 연산자는 으로 비교한다.


Boxed primitive 또는 Wrapper class(Integer) 끼리 비교 하는 경우, 

== 연산자각 객체의 주소 값 비교 하게 된다.


값끼리의 비교는 equal 메소드를 사용해야한다.


if (b.equals(c))  




너무나 당연한 결과다.

그렇지만 호출한 메소드에서 primitive로 했는지 래퍼클래스로 했는지 신경안쓰고 

값비교를 해버리면 실수할 수도 있다는 것 ㅋㅋ