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

来源:互联网 发布:淘宝网首页布局介绍 编辑:程序博客网 时间:2024/05/01 05:10

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;    }
原创粉丝点击