<a class="btn btn-sm btn-red-hollow attention" id="btnAttent" target="_blank">更多免费教学文章<font color="blue" size="2">请关注这里</font></a>
equals方法和==
对于String字符串
<font color="red">
equals用来判断字符串的内容是否相同
==用来判断引用地址是否相同
equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。
hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。
之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。
<font color="red">
两个obj,如果equals()相等,hashCode()一定相等。
两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。
所以:
可以考虑在集合中,判断两个对象是否相等的规则是:
第一步,如果hashCode()相等,则查看第二步,否则不相等;
第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。
<font color="red">
※※※※※equals()技能比较内存地址,也能比较值 如果比较值的话 需要重写equals方法
public class testequals {
public static void main(String[] args) {
// User u1 = new User(0, "zym");
// User u2 = new User(0, "zym");
// System.out.println("test equals method: "+u1.equals(u2));
// System.out.println("test == : "+(u1==u2));
String s = new String("zym");
String s2 = new String("zym");
System.out.println("test equals method: "+s.equals(s2));
System.out.println("test == : "+(s==s2));
}
}
对于非String字符串所有其他
都是用来判断引用,地址
//Uers 类用于测试
class User{
private int id;
private String name;
//构造方法
public User(int id,String name) {
this.id = this.id;
this.name = this.name;
}
}
public class testequals {
public static void main(String[] args) {
User u1 = new User(0, "zym");
User u2 = new User(0, "zym");
System.out.println("test equals method: "+u1.equals(u2));
System.out.println("test == : "+(u1==u2));
}
}
网友评论