assertSame()怪异吗?

时间:2012-11-08 13:15:16

标签: junit assertions

有人可以解释一下吗?

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

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

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

1 个答案:

答案 0 :(得分:2)

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

但是,“123”和新的String(“123”)是不同的对象,尽管它们包含相同的字符,因此assertSame()失败。 assertEquals()在两种情况下都会成功。