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

使用==检查对象引用是否相等(在Java中)

范豪
2023-03-14
问题内容

为什么…

    String a = new String("a");
    StringBuilder b = new StringBuilder("a");
    System.out.println(a==b);

在给定…的情况下导致编译时出现不兼容的类型错误

    String a = new String("b");
    Object b = new StringBuilder("b");
    System.out.println(a==b);

… 才不是?

为什么我可以比较String和Object的对象引用,而不比较StringBuilder和String的对象引用?它们不是都只是指向存储位置吗?

谢谢


问题答案:

根据Java语言规范(15.21.3):

如果无法通过强制转换将任何一个操作数的类型转换为另一个操作数的类型,则将发生编译时错误(第5.5节)。两个操作数的运行时值必然不相等(忽略两个值均为null的情况)。

这意味着,为了“比较”两种引用类型,应能够将一种转换为另一种。字符串“是”一个对象,但Stringand 之间没有“ cast”
StringBuilder



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

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

  • 问题内容: …换句话说:假设我有2个这样声明的字符串: 这两个字符串是两个不同的对象,但是如果我运行 我得到“ equals()返回true”。这是因为String类重写equals()方法以实现内容级别相等。但是,我需要访问一个引用级别的相等性(如在Object中实现的相等性),以将一个对象与两个对象区分开。我怎样才能做到这一点? 我尝试了这个: 尝试调用String的Object equals

  • 我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表 要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。

  • 我有一个创建Element类型arraylist的主类: 然后我有一个元素clas: 我想在将一个元素添加到列表(它的id和名称)之前进行检查,以检查列表中已经存在的另一个元素是否已经具有这些精确值(id和名称)。我知道我可以使用toString方法来实现这一点,但我不确定如何在将元素添加到列表之前重写它以传递id和名称。他们是这样做的吗?理想情况下,我只想添加一个元素,如果它还不存在的话。

  • 问题内容: 我有上述2个类(POJO),它们都是绝对相同的(除了课程名称),我将它们添加到两个数组列表:aListA和aListB。我需要比较两个对象是否相同。如果它们相同,则需要将它们添加到另一个列表(commonList)中,如果它们恰好是不同的,则需要将它们添加到另一个列表(differentList)中。我写了以下代码: 我的问题是,即使两个不同POJO中的数据(变量,firstId和se