자바에서 Long 값을 ==로 비교하면 안되지만,
실수하기 쉽다.
문제는 Long.valueOf()를 사용할 때
성능 향상을 위해 내부적으로 바이트 (Byte) 범위에 대해 캐시 (Cache)를 사용하는데
이로 인해 127을 넘어서기 전까지 정상 동작하는 함정이 있다.
다음은 이를 확인하는 테스트이다.
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.hamcrest.MatcherAssert.assertThat;
public class LongTest {
@Test
public void valueOf() {
assertThat(Long.valueOf("1"), is(sameInstance(Long.valueOf("1"))));
assertThat(Long.valueOf("127"), is(sameInstance(Long.valueOf("127"))));
assertThat(Long.valueOf("128"), is(not(sameInstance(Long.valueOf("128")))));
}
}
댓글을 달아 주세요