gguri4549   2년 전

안녕하세요

자바로 1157번 문제를 풀었는데요

Map을 이용해서 풀었는데~ 테스트케이스는 모두 맞았는데 ㅜㅜ 계속 틀리다고 나오네요 ㅜㅜ

혹시 제가 생각하지 못한 반례가 어떤 것이 있는지 알려주시면 정말 감사하겠습니다 ㅜㅜ

djm03178   2년 전

반례는 다음과 같습니다.

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   2년 전

정말 감사합니다 ㅠㅠㅠ 해결되었습니다! 객체는 equals로 비교해야하는 걸 꼭 명심하겠습니다! 

댓글을 작성하려면 로그인해야 합니다.