分享学习关于==,equals,hashcode的理解

"作用是用来判断两个Object的类型是否相等的。其中是通过两个Object类型的地址来判断的。下面举个简单的例子。
分享学习关于==,equals,hashcode的理解
在这里我分别给abc3个String类型赋值“Hello”a
b返回的值是true但是ac返回的却是false。这是因为我们在给c赋值的时候创造了一个新的对象。所以导致a和c的地址不同,所以说这就导致了为什么a和c打印出来的都是Hello但是"“的结果却不一样。至于a b为什么会返回true值呢?这是因为JVM为了减少对字符串变量的重复创建,其拥有一段特殊的内存空间,这段内存被称为字符串常量池(constant pool)或者是“字符串字面量池”。“Hello”这个值一开始在字符串常量池里面`是没有的,但是在给a赋值的时候创造出来了,并且返回给a,所以说在b也要赋值的时候开业直接返回常量池中的“Hello”,所以说a和b拥有的是同一个对象引用,即指向的是同一块内存地址,因此使用 "”” 操作符对a和b进行比较,结果为true。
String类型的equals方法的是这样来写的:
分享学习关于==,equals,hashcode的理解
在equals中分别用==来判断地址是否相等,字符长度是否相等,String类型的值放到一个char数组中,进行值的比较。有些时候因为equals方法不能达到完美对于程序的要求,这时我们需要改写equals方法。例如我们设置了两个不同的对象,但是我们set属性的值是相同的,这时如果不改写equals方法就会返回一个false。
hashCode存在的意义主要是提供查找的快捷性,比如说在Hashtable、HashMap中等。hashCode是用来在散列存储结构中确定对象存储的位置的;如果equals方法返回的是true,那么这两个对象的hashcode的返回值一定是相同的,但是hashcode的值相同,equals不一定是true,这就好比把两个不用的东西放到了同一个篮子里,你不能因为放到同一个篮子里面了就说这两个东西是一样的。但是如果我们想要判断是否equals是否相等,我们这时就要去重写equals方法。
暂时就写这么多吧,如果有不对的地方,还希望大佬指出,谢谢。