一般而言:
==:基本数据类型比较的是值,引用数据类型比较的是内存地址
euqals:一般我们拿来比较对象内容,看equals的具体实现,比如Object比较的是内存地址
hashcode:散列数值,equals相等,hashcode一定相等,
反之hashcode相等,equals不一定相等,因为不同对象的hashcode有一定几率相等
1、对于Object类来说 equals等价于==,查看JDK源代码:
public boolean equals(Object obj) { return (this == obj); }
2、Object的hashcode表示的是对象的地址,这个地址只是一种转换后的表示形式,并不一定是真正的内存地址。
3、String的hashCode实现方式:
public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; }字符串“1a”和"2a"的hashcode相差31,字符串"a1"和"a2"的hashcode相差1