美文网首页
Java中等于号==和equals()方法的区别

Java中等于号==和equals()方法的区别

作者: 雁阵惊寒_zhn | 来源:发表于2021-05-07 10:53 被阅读0次

    一个例子

    public class Test {
        private int value;
        public Test(int value){
            this.value = value;
        }
    
        public static void main(String[] args)
        {
            String s1 = new String("HELLO");
            String s2 = new String("HELLO");
            System.out.println("s1 == s2 " + (s1 == s2));
            System.out.println("s1.equals(s2) " + s1.equals(s2));
    
            Test test1 = new Test(1);
            Test test2 = new Test(1);
            System.out.println("test1 == test2 " + (test1 == test2));
            System.out.println("test1.equals(test2) " + test1.equals(test2));
        }
    
        @Override
        public boolean equals(Object test){
            if (test == this){
                return true;
            }
            if (!(test instanceof Test)){
                return false;
            }
            Test t = (Test) test;
            if (this.value == t.value){
                return true;
            }
            return false;
        }
    
        @Override
        public int hashCode() {
            return 1;
        }
    }
    

    执行结果:

    s1 == s2 false
    s1.equals(s2) true
    test1 == test2 false
    test1.equals(test2) true
    

    由上面的例子,我们来谈区别

    1. 很显然,==是操作符,equals()是一个方法
    2. 操作符==进行的是引用的比较,也就是两个对象的地址比较。方法equals()是内容的比较。换言之,操作符==检查两个对象是否指向相同的内存地址,而方法equals() 比较两个对象的值是否相同。

    由上面的例子,补充一些知识点

    1. 如果类定义中没有重写方法equals() ,则默认使用这个类最近的父类的equals() 方法
    2. 当重写方法equals() 时,也要同时重写hashCode()方法。保证两个相等(equals() 方法结果为true)的对象,他们的哈希值也要相等(hashCode()返回相同的值)。为什么相等对象的哈希值要相同?这里我们举一个反例论证更加直观,假如两个相等对象的哈希值不同,在作为key放入HashMap结构中时,这两个相等的对象就会放入到不同的桶中,在某种意义上HashMap结构中存在key相等的两个对象。

    相关文章

      网友评论

          本文标题:Java中等于号==和equals()方法的区别

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