在oracle java文档中,
list 中的 equals() 表示如果两个列表包含相同的元素,则它们被定义为相等。
但从对象类 equals() 仅当它们的哈希码相等时才返回 true。
这意味着列表中的 equals() 覆盖对象类中的 equals 方法。对于字符串中的 equals() 也是一样的。只要它们具有相同的字符,它们就返回 true。
所以每当我将类型声明为 String 或使用像 arraylist 这样的列表类
equals() 会自动被覆盖,对吧?
equals() 会自动被覆盖,对吗?
Answer :是的绝对正确,如果您询问被覆盖.equals()
方法在运行时自动调用
**Object类是java中每个类的父类,它由以下部分组成.equals()
比较对象引用的方法
But String
类,包装类(Integer,Long etc..)
和集合类(ArrayList, hashSet etc..)
被覆盖.equals()
比较对象内容而不是对象引用的方法
为了避免混淆,这是一个清晰的例子
public class Main2 {
public static void main(String[] args) {
List<String> l1 = new ArrayList<>();
l1.add(new String("hello"));
List<String> l2 = new ArrayList<>();
l2.add(new String("hello"));
System.out.println(l1.equals(l2)); //true
List<Test> t1 = new ArrayList<>();
t1.add(new Test());
List<Test> t2 = new ArrayList<>();
t2.add(new Test());
System.out.println(t1.equals(t2)); //false
}
}
class Test{
}
在上面的例子中比较List<String>
将返回 true 因为.euqals()
中的方法String
被覆盖以比较内容
但在比较的同时Lits<Test>
即使两个对象都是空的,也会返回 false,因为.equals()
中的方法Test
默认情况下,类不会被覆盖,它将调用Object
class .equals()
方法将对象的引用进行比较==
does
谷歌问题对象类 equals 方法比较 hashcode ?
Answer
java.lang.Object 类要求在对象上调用 hashCode() 方法时,使用 equals() 方法比较相等的任何两个对象必须生成相同的整数结果 [API 2014]。 equals() 方法用于确定对象实例之间的逻辑等价性。2018 年 2 月 12 日
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)