자바에서 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")))));

    }


}

Posted by izeye