有人可以告诉我为什么我使用> 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
方法。