assertSame()怪异吗?

问题描述 投票:1回答:1

有人可以解释一下吗?

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

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

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

junit assertions
1个回答
2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.