数据类型;==,equals,hashCode-Java难点解析(一)

Java基本数据类型

boolean,byte,char,short,int,long,float,double
其他都是封装类型

== vs equals

八种基本数据类型比较,使用==;
对于引用数据类型而言,如果使用==比较内存中的值,不同对象的值不相同;
如果使用object默认的equals方法,原理同上;
equals是object类的方法,比较是否引用了同一个对象;通俗的说,就是比较是不是同一个new出来的对象。也就是说,如果new String("abc")两次,equals结果是false。
通常情况下String等封装类型会对equals进行重写(同时需要重写hashcode方法),这样才能比较具体内容。

equals vs hashCode

hashCode返回对象的散列码,返回值是int类型的散列码。
对象的散列码是为了更好的支持基于哈希机制的Java集合类,例如 Hashtable, HashMap, HashSet 等。

关于hashCode方法,一致的约定是:
重写了euqls方法的对象必须同时重写hashCode()方法。
如果2个对象通过equals调用后返回是true,那么这个2个对象的hashCode方法也必须返回同样的int型散列码
如果2个对象通过equals返回false,他们的hashCode返回的值允许相同,最好是不相同。(然而,程序员必须意识到,hashCode返回独一无二的散列码,会让存储这个对象的hashtables更好地工作。所以最好)

你可能感兴趣的:(数据类型;==,equals,hashCode-Java难点解析(一))