有人可以告诉我为什么我使用> 127的值时assertSame()失败吗?

        import static org.junit.Assert.*;

        ...

        @Test
        public void StationTest1() {
          ..

          assertSame(4, 4);         // OK
          assertSame(10, 10);       // OK
          assertSame(100, 100);     // OK
          assertSame(127, 127);     // OK
          assertSame(128, 128);           // raises an junit.framework.AssertionFailedError!
          assertSame(((int) 128),((int) 128)); // also junit.framework.AssertionFailedError!
        }

我正在使用JUnit 4.8.1。

最佳答案

原因是Java的自动装箱。
您使用的方法:

public static void assertSame(Object expected, Object actual)

它仅适用于对象。当您将int传递给此方法时,Java将自动调用
Integer.valueOf( int i )

这些值。因此,将其强制转换为int无效。

对于小于128的值,Java具有高速缓存,因此assertSame()Integer对象与其自身进行比较。对于大于127的值,Java将创建新实例,因此assertSame()Integer对象与另一个对象进行比较。由于它们不是同一实例,因此assertSame()方法返回false。

您应该使用以下方法:
public static void assertEquals(Object expected, Object actual)

代替。此方法使用equals()中的Object方法。

07-26 04:50