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

Java中equals()方法的行为

咸弘雅
2023-03-14
问题内容

考虑以下Java代码:

    Object a = new Integer(2);
    Object b = new Integer(2);
    System.out.println(a.equals(b));

    Object x = new Object();
    Object y = new Object();
    System.out.println(x.equals(y));

第一个打印语句打印true,第二个打印语句false

如果这是故意的行为,这将如何帮助Java编程?

如果这不是故意行为,那么这是否是Java中的缺陷?


问题答案:

我将保留您的问题,但您应该知道,如果该问题的目的是让您学习并且您的解决方案是询问StackOverflow,那么您会很受伤。那边…

此行为是故意的。

默认equals()方法on java.lang.Object比较 内存地址
,这意味着所有对象都互不相同(仅对同一对象的两个引用将返回true)。

java.lang.Integer覆盖此比较
的的IntegerS,SO两个不同Integerš都表示两个比较相等的数量。如果==改用,false两种情况都可以得到。

Java的标准做法是重写equals方法,以返回true具有相同 逻辑
值的对象,即使它们是在不同的时间(甚至使用不同的参数)创建的也是如此。如果您没有办法问“这两个东西代表相同的值吗?”,让对象代表数字不是很有用。

顺便说一句,这是一个切线,Java实际上Integer为小值保留了对象的缓存。因此,有时您可能会得到两个Integer对象,即使从两个不同的来源获取它们,即使==操作员也会返回true它们。您甚至可以获得代码,它们对较大的整数的行为与对较小的整数的行为有所不同,而无需查看整数值!



 类似资料:
  • 本文向大家介绍Java中AbstractSequentialList的equals()方法,包括了Java中AbstractSequentialList的equals()方法的使用技巧和注意事项,需要的朋友参考一下 该方法从Java中的AbstractList类继承。它用于检查对象与此列表是否相等。如果对象等于此列表,则返回TRUE,否则返回FALSE。 语法如下- 这里,o是要与该列表进行相等性

  • 我有一个扩展Person类的学生类。我的超级类中没有equals方法,只有我的子类中的两个,如图所示。我正在尝试理解我的第二、第三和第四个print语句的运行时行为。语句1调用了接受学生参数的equals方法,这是有意义的,因为要比较的两个对象都是声明类型的学生。但是,语句2调用了接受人参数的equals方法,而最后两个语句调用了Object类中的equals方法。有人能解释一下为什么Java是动

  • 本文向大家介绍Java实现equals()方法,包括了Java实现equals()方法的使用技巧和注意事项,需要的朋友参考一下 示例 要轻松实现对象的equals方法,可以使用EqualsBuilder类。 选择字段: 使用反射: 布尔参数用于指示是否等于应检查瞬态字段。 使用反射避免某些字段:            

  • 本文向大家介绍java中hashCode、equals的使用方法教程,包括了java中hashCode、equals的使用方法教程的使用技巧和注意事项,需要的朋友参考一下 前言 众所周知Java.lang.Object 有一个hashCode()和一个equals()方法,这两个方法在软件设计中扮演着举足轻重的角色。在一些类中重写这两个方法以完成某些重要功能。 1、为什么要用 hashCode()

  • 本文向大家介绍Java中替代equals,compareTo和toString的方法,包括了Java中替代equals,compareTo和toString的方法的使用技巧和注意事项,需要的朋友参考一下 我们都曾在POJO中重写过equals(),compareTo()和toString()方法。但是另有其他能做到职责分离的更好的方法并带来更简洁的代码。阅读这篇文章来一探究竟吧! 更简明的职责——

  • 问题内容: 如何覆盖对象类中的equals方法? 即我有 我想将参数obj转换为Person类型,但是如果执行(Person)obj,它将无法正常工作。 问题答案: 您可以将其强制转换为方法,只需使用的实例确保其类型正确