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

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


  • 共同点:
    • 都可以作比较,返回值都是Boolean
  • 区别:

    • 1、 == 是比较运算符,它既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值

    • 2、equals方法只能比较引用数据类型,在重写之前,比较的是地址值,底层依赖的是==号,功能等价,但是比较地址值是没有意义的,所以我们需要重写equals()方法比较对象中的属性值

    • 3、引用数据类型
      • 如果相互比较的两个对象是常量,则对象地址值是指向常量池中的常量值,如果值相等,则指向的是同一个常量,所以地址值也想等。
      • 如果相互比较的两个对象中至少有一个是用构造方法创建的,则其地址值指向的是两个不同的对象,所以地址值不想等。
    /**
     *Object中的equals()方法
     *功能 :将Object对象的地址值返回
     *通俗理解 :没什么卵用,就是给 == 穿了件衣服
     */
    public boolean equals(Object obj) {
        return (this == obj);
    }
  • 如果需要比较引用类型数据中的属性值,则需要重写Object中的equals()方法,比如String类中就重写了该方法

    /**
     *String类中重写了Object中的equals()方法
     *功能 :将此String对象与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时(即属性值相同),结果才为 true。
     *通俗理解 :比较两String对象中属性值是否相同,与地址无关 
     */
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

猜你喜欢

转载自blog.csdn.net/weixin_38981172/article/details/78160919
今日推荐