==号比较的是两个变量的数值是否相等,比较的是存储在内存里面的数值是否相同
有两种情况
比较两个基本数据类型,直接比较的是值是否相等
比较两个对象,比较的是引用,比较的是内存地址是否相同,引用是否指向同一块内存
===
equals()是Object提供的方法之一,比较的是两个对象是否相同,比较的也是引用。但是equals方法可以重写覆盖,所以可以通过这样让它比较数据内容,例如String的底层代码就重写了这个方法
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (!COMPACT_STRINGS || this.coder == aString.coder) { return StringLatin1.equals(value, aString.value); } } return false;}
hashcode并不是唯一的,它是一种算法,让同一个类的对象按照自己的不同特征尽量有不同的哈希码,但是也有相同的情况,这取决于算法的具体实现
hashcode()和equals()相比,效率更高,重写equals方法一般比较复杂,但是hashcode只要一个hash值就可以比较了
在没有刻意修改equals方法的情况下,equals比较相等的对象,hashcode也是一样的
但是hashcode 不是绝对可靠的,可能hashcode相等,但是不equals
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。