考虑以下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
覆盖此比较 值
的的Integer
S,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,它将无法正常工作。 问题答案: 您可以将其强制转换为方法,只需使用的实例确保其类型正确