Java의 Integer, int 숫자 비교의 주의사항
예전에 프로그램에 버그가 있었고 원인을 한참을 못찾은적이 있었다.
숫자 비교하다 생긴 문제였고,
무심코 코딩하다 틀리고 삽질할 수 있는 부분이라 블로그에 남겨본다.ㅎㅎ
아래는 숫자를 저장하는 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로 했는지 래퍼클래스로 했는지 신경안쓰고
값비교를 해버리면 실수할 수도 있다는 것 ㅋㅋ