有人可以解释一下吗?
String str1 = "123";
String str2 = "123";
assertSame(str1,str2); // works
assertSame("1", new String("1")); // fails
为什么第一个断言有效,但不是第二个?对我没有意义。我没有进行字符串比较 - 这应该由assertEquals()完成 - 但仅仅是对象比较。在我看来,第一个assertSame(str1,str2)也应该失败,因为它不引用同一个实例。
答案 0 :(得分:2)
编译器将对文字“123”的引用提取到字节码中常量池中的相同条目中,因此它们被视为相同。
但是,“123”和新的String(“123”)是不同的对象,尽管它们包含相同的字符,因此assertSame()失败。 assertEquals()在两种情况下都会成功。