java equals和==以及hashmap原理和区别

版权声明:本文为博主原创文章,未经博主允许不得转载。如有问题,欢迎指正。 https://blog.csdn.net/qq_30225725/article/details/88226479

更多免费教学文章请关注这里

equals方法和==
对于String字符串

equals用来判断字符串的内容是否相同
==用来判断引用地址是否相同

equals():反映的是对象或变量具体的值,即两个对象里面包含的值–可能是对象的引用,也可能是值类型的值。

hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。

之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。

  两个obj,如果equals()相等,hashCode()一定相等。
  两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。
所以:
  可以考虑在集合中,判断两个对象是否相等的规则是:
    第一步,如果hashCode()相等,则查看第二步,否则不相等;
    第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。

※※※※※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));

    }

}

猜你喜欢

转载自blog.csdn.net/qq_30225725/article/details/88226479