gpt4 book ai didi

java - JUnit - 断言相同

转载 作者:IT老高 更新时间:2023-10-28 20:31:37 26 4
gpt4 key购买 nike

有人能告诉我为什么当我使用 > 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)

它只适用于对象。当你将 ints 传递给这个方法时,Java 会自动调用

Integer.valueOf( int i )

使用这些值。所以强制转换为 int 没有效果。

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

你应该使用方法:

public static void assertEquals(Object expected, Object actual)

相反。此方法使用 Object 中的 equals() 方法。

关于java - JUnit - 断言相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2882337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com