Featured image of post Java的equals和contains的一些区别

Java的equals和contains的一些区别

简单的探讨Java equals和contains的底层原理

equals() && contains()

Java 中常见的比较有equalshashcode

今天在学习的时候就遇到了一个头疼的问题(菜鸟级的我有大大疑问)

在比较两个对象内的元素时,无论是使用equals还是hashcode都始终得不到我想要的结果。遂百度,记此文

那么这两种方法到底有什么区别呢?

equals()方法是根类 Object 的默认方法,查看 Object 中 equals()的默认实现:

1
2
3
4
public boolean equals(Object obj) {
    return (this == obj);
    }

可以看出没有重写过的 equals()方法和 == 是一样的,都是比较两个对象引用指向的内存地址是否一样判断两个对象是否相等。

也就是说,基本上每次都要Overwrite这个方法

hashCodeJDK根据对象的地址或者字符串或者数字计算该对象的哈希码值的方法。

hashcodeequals 两者必须同时重写。

注意在类中,有一些 equals 方法 OverWrite 时必须要传入 Object 类型

1
2
3
4
5
public boolean equals (person obj){
	return (this == obj);
	}	

//这样写就是错误的,equals()方法不允许传入非 Object 类
Licensed under CC BY-NC-SA 4.0