Java语言高分悬赏:请问==和equals的区别和联系是什么,hashcode有什么用

Java语言高分悬赏:请问==和equals的区别和联系是什么,hashcode有什么用

== 是简单的比较,针对指针比较的是地址;
equals 是按一定的业务逻辑比较的,比如字符串的 equals 比较各个字符相等;
hashCode 是返回对象的哈希码,一般可以理解为对象在内存中的地址;== 操作多是比较这个 hashCode 的。

== 引用类型比较的是对象的地址 基本数据类型比较的是数值

equals 是Object里的方法 要是没有重写这个方法的话那默认就是跟== 等效比较地址的

hashCode一般是依据对象里的成员属性按照一定的hash函数之后得到的一个值

两个对象 equals相等 hashcode必然就相等

hashcode相等 equals未必就会等价

==:
对于java中的基本类型(byte、short、int、long、flow、double、boolean、char)是对比 == 前后的值,若相等则返回true,否则返回false;
对于其他类型(引用类型)则只比较他们的地址值,同样,若相等则返回true,否则返回false;
equals(Object obj):
1.先说对于父类的equals方法,它会先比较this和obj是否是同一个对象(使用==比较),若相等,则直接返回ture;
2.举一个例子(String类重写的equals方法):
2.1 equals(Object anObject):
2.1.1 首先,同样会有比较this和anObject是否是同一个对象(使用==比较,由于是object对象,所以对比的是内存地址)的逻辑,若相等,则直接返回ture;
2.1.2 然后又会使用(anObject instanceof String)去判断anObject的类型是否为String(补充instanceof的作用:判断关键字前面的对象与关键字后面对象的是其直接或间接子类,或者是其接口的实现类,可由于String是final类,所以在这里只能是String类),若不是String类则直接返回false;
2.1.3 若判断为String类,则对anObject进行强制类型转换(String)anObject,然后比较两个String的char数组(补充String与char[]的关系:java中的String类在声明的时候会在String实例内维持一个char类型的value[],用于存放该String的值)的长度(value.length),若两者长度不想等则直接返回false;
2.1.4 若两者的长度(value.length)相等,则进行倒序遍历比较两个String的值(char类型数组的value)逐个比较,只要其中任意位置的值不想等则返回false;
2.1.5 最终,所有位置的值都能一一对应则返回true。
3.其他类或者自己写的的equals有各自的逻辑
至于hashCode()方法作用,其实就是返回一个对象的引用地址。