예전에 프로그램에 버그가 있었고 원인을 한참을 못찾은적이 있었다.
숫자 비교하다 생긴 문제였고,
무심코 코딩하다 틀리고 삽질할 수 있는 부분이라 블로그에 남겨본다.ㅎㅎ
아래는 숫자를 저장하는 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로 했는지 래퍼클래스로 했는지 신경안쓰고
값비교를 해버리면 실수할 수도 있다는 것 ㅋㅋ
'개발 > JAVA' 카테고리의 다른 글
Java String split 또는 replace 할 때 .(Dot, 점) 안되는 현상 (0) | 2016.09.29 |
---|---|
trim()으로 걸러내지 못하는 공백문자 정규식으로 걸러내기 (0) | 2016.07.22 |
구아바(Guava)를 이용하여 List의 특정값 추출해서 새로운 List 만들기 (0) | 2016.03.25 |
구아바(Guava) Iterables.filter를 사용해서 리스트 필터링 하기 (0) | 2016.03.25 |
server to server에서 DATE 전송. jsp에서 포멧에 맞춰 출력하기. (0) | 2014.10.15 |