【问题标题】:assertSame() weirdness?assertSame() 怪异?
【发布时间】:2012-10-28 16:22:17
【问题描述】:

谁能解释一下?

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

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

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

【问题讨论】:

    标签: junit assertions


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 2011-12-12
      • 2014-09-17
      • 2010-10-12
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多