반례는 다음과 같습니다.
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
a와 b가 모두 똑같이 128개씩 있는 케이스인데, A가 출력됩니다.
이런 현상이 벌어지는 이유는, 38번째 줄에서 map.get(keyList.get(0))와 map.get(keyList.get(1))을 != 연산자로 비교하고 있는데 이는 두 Integer 객체의 값이 다른지를 보는 것이 아니라 둘이 정확히 동일한 객체가 아닌지를 판별하는 식입니다. Java에서 127까지의 Integer 객체는 미리 만들어져있고 이 값에 해당하는 객체는 미리 만들어진 객체를 사용하지만 그 이상의 값에 대한 Integer 객체는 필요할 때마다 새로 만들기 때문에 같은 값을 나타내는 객체라고 하더라도 둘은 다를 수 있습니다.
Wrapper class의 객체는 반드시 equals 메서드로 비교하세요.
gguri4549 5년 전
안녕하세요
자바로 1157번 문제를 풀었는데요
Map을 이용해서 풀었는데~ 테스트케이스는 모두 맞았는데 ㅜㅜ 계속 틀리다고 나오네요 ㅜㅜ
혹시 제가 생각하지 못한 반례가 어떤 것이 있는지 알려주시면 정말 감사하겠습니다 ㅜㅜ