当前位置: 首页 > 面试题库 >

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

谭铭
2023-03-14
问题内容

…换句话说:假设我有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的Object equals()方法,但是它不起作用。

有什么建议吗?


问题答案:

String在Java中,使用表示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.");

结果是:

equals() returns true.

有关更多信息,请参见以下链接:

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


 类似资料:
  • 问题内容: 为什么… 在给定…的情况下导致编译时出现不兼容的类型错误 … 才不是? 为什么我可以比较String和Object的对象引用,而不比较StringBuilder和String的对象引用?它们不是都只是指向存储位置吗? 谢谢 问题答案: 根据Java语言规范(15.21.3): 如果无法通过强制转换将任何一个操作数的类型转换为另一个操作数的类型,则将发生编译时错误(第5.5节)。两个操作

  • 我在JUnit测试中检查两个数组列表是否相等时遇到问题。当我测试两个列表是否相等时,它只检查它们的字符串表示形式是否相同。它适用于简单的示例,例如[1,2,3]、[1,2,3]或当列表包含以字符串表示的所有属性的对象时。但是当我有两个具有相同字符串表示形式但某些对象具有不同属性的列表时,我如何检查它们的相等性? 例如: 如果我有类Human的对象(int height,int weight,boo

  • 问题内容: 是否有任何的java utils的,允许检查对象平等,不受 平等 覆盖?由于某些原因,我不想为类提供equals方法。我在单元测试中需要类似 SomeUtils.equals(a,b)之 类的东西 , 它比较所有对象字段(我想是通过反射)。 问题答案: 您可以在Apache Commons EqualsBuilder中使用

  • 问题内容: 据我了解(如果我错了,请纠正我),Hibernate使用对象引用来检查对象的相等性。当Hibernate识别同一数据库记录中有多个对象附加时,它将引发以下异常。 我的问题是,Hibernate是否使用方法检查对象是否相等(默认的equal方法使用对象引用)?如果为true,则重写的方法会改变Hibernate的行为吗? 注意:我的问题不是关于Hibernate持久对象中的实现或方法问题

  • 本文向大家介绍检查两个StringBuilder对象在C#中是否相等,包括了检查两个StringBuilder对象在C#中是否相等的使用技巧和注意事项,需要的朋友参考一下 要检查两个StringBuilder对象是否相等,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

  • 我有一个Java类,下面是一个示例: