如何检查实现内容相等的对象中的引用相等?

MaV*_*ldo 5 java methods object

...换句话说:假设我有 2 个字符串声明如下:

String one = new String("yay!");
String two = new String("yay!");
Run Code Online (Sandbox Code Playgroud)

这两个字符串是两个不同的对象,但是如果我运行

if(one.equals(two))
   System.out.println("equals() returns true.");
Run Code Online (Sandbox Code Playgroud)

我得到“equals() 返回 true”。这是因为 String 类覆盖了 equals() 方法以实现内容级别相等。但是,我需要访问一个引用级别的相等性(就像在 Object 中实现的那个)来区分对象一和对象二。我怎样才能做到这一点?

我试过这个:

one.getClass().getSuperclass().equals();
Run Code Online (Sandbox Code Playgroud)

尝试调用 String 一的 Object equals() 方法,但没有奏效。

有什么建议吗?

tom*_*tom 5

如果您想检查参考,只需执行:

one == two
Run Code Online (Sandbox Code Playgroud)

但要小心字符串。有一个叫做字符串常量池的东西,因此它们可能引用同一个对象。


Sam*_*Sam 3

String在java中使用a String Literal Pool,这意味着:“当你尝试构造一个字符串时,首先String类搜索Literal Pool传统的相同字符串,如果存在则返回它,如果不存在则创建它”,所以你不能通过equals方法检查比较 String 实例的引用,必须使用==运算符,如下所示:

String one = new String("yay!");
String two = new String("yay!");
if(one.equals(two))
   System.out.println("equals() returns true.");
if(one == two)
   System.out.println(" == operator returns true.");
Run Code Online (Sandbox Code Playgroud)

结果是:

equals() returns true.
Run Code Online (Sandbox Code Playgroud)

请参阅以下链接了解更多信息:

  1. http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/
  2. Java String.equals 与 ==