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

时间:2012-02-26 13:07:44

标签: java object methods

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

String one = new String("yay!");
String two = new String("yay!");

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

if(one.equals(two))
   System.out.println("equals() returns true.");

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

我试过了:

one.getClass().getSuperclass().equals();

尝试调用String 1的Object equals()方法,但它不起作用。

有什么建议吗?

5 个答案:

答案 0 :(得分:3)

java中的

String使用String Literal Pool,这意味着:“当你尝试构造一个字符串时,首先在Literal Pool中搜索传统相同字符串的String类,如果存在则返回它,如果不存在则创建它“,所以你无法通过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.");

结果是:

equals() returns true.

请参阅以下链接以获取更多信息:

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

答案 1 :(得分:2)

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

one == two

但要小心弦乐。有一个名为String constant pool的东西,所以它们可能引用同一个对象。

答案 2 :(得分:1)

if (one == two)
    System.out.println("one and two are the same object");

答案 3 :(得分:1)

使用简单的==比较。但是,要避免String实习,您必须使用char数组创建字符串,例如:String me = new String(new char[] { 'm', 'e' });而不是使用字符串文字"me",例如String me = new String("me");

答案 4 :(得分:0)

您唯一需要的是“==”等于运算符。