java中==和equals和hashCode的区别?

java中==和equals和hashCode的区别?

通俗点讲:
==:等于,equals:相同。

==:看看左右是不是一个东西,equals:看看左右是不是长得一样。

==是指对内存地址进行比较,equals()是对字符串的内容进行比较,Object里的equals的实现就是直接调用了==操作。

"==" 可比较基本数据类型的值是否相等,如果用于比较引用数据类型数据的时候比较的是两个对象 的内存地址,equals方法默认情况下比较也是两个对象 的内存地址,
如果重写equals hashcode方法,比较的是两个字符串对象的内容是否一致.( 而比较地址值是没有意义的,所以,一般子类也会重写该方法。)

hashCode():返回对象在内存的实际地址值,可以用于判断是否是同一个对象。

	1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。 
	2、如果两个对象不equals,他们的hashcode有可能相等。 
	3、如果两个对象hashcode相等,他们不一定equals。 
	【3是2的逆命题其实是一个意思。
      解析:如果两个对象的hashcode相等,他们的equals应该相等,不过请注意:这个只是规范,
      如果你非要写一个类让equals(Object obj)返回true而hashcode()返回两个不相等的值,编译和运行都是不会报错的】
	4、如果两个对象hashcode不相等,他们一定不equals。 
	
覆盖equals时总要覆盖hashCode,否则会导致该类无法结合某些集合一起正常运作( HashMap、HashSet和Hashtable。)



https://www.cnblogs.com/kexianting/p/8508207.html

猜你喜欢

转载自blog.csdn.net/Smile_Sunny521/article/details/89632674