1

有人可以解释一下吗?

    String str1 = "123";
    String str2 = "123";
    assertSame(str1,str2); // works

    assertSame("1", new String("1")); // fails

为什么第一个断言有效,而第二个无效?对我来说没有意义。我没有进行字符串比较——这应该由 assertEquals() 完成——而只是一个对象比较。在我看来,第一个 assertSame(str1,str2) 也应该失败,因为它没有引用同一个实例。

4

1 回答 1

2

编译器将两个对文字“123”的引用提取到字节码常量池中的同一条目中,因此它们被视为相同。

然而,"123" 和 new String("123") 是不同的对象,尽管它们包含相同的字符,所以 assertSame() 失败。assertEquals() 在这两种情况下都会成功。

于 2012-11-08T16:01:35.170 回答