최근 프로젝트중 버그가 발생했는데 원인을 찾느라 애먹은적이 있다.
숫자 비교하다 생긴 문제였으며 생각없이 코딩하다 원인 파악하는데 시간 보내지 말라고 기록을 남겨본다
자바에서 숫자를 저장하는 3가지 방법이다
int a = 1;
Intger b = 1;
Intger c = new Integer(1);
if(a==1) => true
if(b==1) => true
if(c==1) => true
a,b,c 숫자 모두 당연히 true일 것 이다.
이제 변수 끼리 비교해 보자
// int == Integer
if(a==b) => true
// int == new Integer
if(a==c) => true
// Integer == Integer
if(b==c) => false
비교 대상중 primitive type(int) 변수 존재시 연산자는 값자체를 비교하고
Wrapper class(Integer) 끼리 비교 하는 경우 연산자는 각 객체의 주소 값을 비교하게되기 때문에 false를 반환한다.
그러니 Integer와 Integer를 값을 비교하려면 equal 메소드를 활요하거나 Integer를 int로 형 변환 하여 비교하여야 한다.
if(b.equals(c)) => true
int d = b.intValue();
int e = c.intValue();
if(d==e) =>true
당연히 오류가 생기는 결과 였다..
아무런 생각이 없었다는것을 반성하며 항상 코드 짤때는 신경쓰면서 코딩하자!!