자바 1.5로, 당신은 꽤 많이 교류 할 수 Integer
와 int
많은 상황에 있습니다.
그러나 코드에서 잠재적 인 결함이 발견되어 조금 놀랐습니다.
다음 코드 :
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
어떤 상황에서 결정할 수는 없지만 값이 같을 때 불일치가 잘못 설정 된 것처럼 보입니다. Eclipse에서 중단 점을 설정하고 Integer
값이 모두 137 임을 보았고 부울 표현식을 검사하여 그것이 거짓이라고 말했지만 단계를 넘어 서면 불일치를 true로 설정했습니다.
조건부 변경 :
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
문제를 해결했습니다.
왜 이런 일이 일어 났는지 누군가가 밝힐 수 있습니까? 지금까지 내 PC의 로컬 호스트에서만 동작을 보았습니다. 이 특정한 경우에, 코드는 약 20 번의 비교를 성공적으로 통과했지만 2에서 실패했습니다. 문제는 일관되게 재현 가능합니다.
널리 퍼져있는 문제라면 다른 환경 (dev 및 test)에서 오류가 발생했을 것입니다. 그러나 지금까지이 코드 스 니펫을 실행하는 수백 번의 테스트 후에 아무도 문제를보고하지 않았습니다.
==
두 Integer
값 을 비교 하는 데 여전히 합법적이지 않습니까?
아래의 모든 훌륭한 답변 외에도 다음 스택 오버플로 링크에는 약간의 추가 정보가 있습니다. 실제로 내 원래의 질문에 대답했지만 내 질문에 오토 박스를 언급하지 않았기 때문에 선택한 제안에 표시되지 않았습니다.