比较两个整数:为什么== true?

hud*_*udi 3 java integer

可能重复:
包装类和==运算符

嗨,当我比较整数与==我有一些问题所以你能解释我为什么第二次测试也成功吗?

@Test
public void integerTest() {
    Integer prvni = 127;
    Integer druhy = 127;
    Integer treti = 128;
    Integer ctvrty = 128;

    assertTrue(prvni == druhy);
    assertTrue(treti != ctvrty);

}
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 11

==用于比较对象时,您实际上是在比较引用.也就是说,这两个原因都断言真正是因为prvnidruhy 指向同一个对象,而tretictvrty没有.

这是因为JVM 缓存 Integer -128到127范围内的对象,并在自动装箱值时重用缓存对象.

除非你切换到int,否则你可以通过prvni.intValue()prvni.equals(...)改为使用.