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

作者: 您好简书 | 来源:发表于2019-03-16 14:41 被阅读20次

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

    相关文章

      网友评论

        本文标题:java equals和==以及hashmap原理和区别

        本文链接:https://www.haomeiwen.com/subject/ichsmqtx.html