java中equals与==的对比

==
(1)用于 基本类型(int, float等)的比较时,返回数值 意义/大小 是否相同的结果
(2)用于对象比较时(Interger,String, 库对象、自定义对象等),返回 两对象 地址是否相同的结果

equals
(1)不能用于基本类型,只能作为对象的方法被调用
(2)java中所有对象继承于Object对象, 其中Object 的 equals 表示 两个对象的地址空间是否相同,
所以如果 子类未覆盖equals方法,则继承Object的equals 
如下自定义类  B,未覆盖equals,所以返回结果为两个对象的地址空间是否相同。
class B {
    private int num;
    B() {
        num = 1;
    }
}
B a = new B();
B b = new B();
System.out.println(a.equals(b));//false

但java中一些类在实现时覆盖了equals方法,如String
String 中 equals 表示两个 String 对象所存储字段(字面意义)是否相同
String str_a = new String("abc");
String str_b = new String("abc");
System.out.println(str_a.equals(str_b)); //true
System.out.println(str_a==str_b); // false
而StringBuffer并未覆盖 equals方法,采用继承自Object的equals
StringBuffer sb1 = new StringBuffer("a");
StringBuffer sb2 = new StringBuffer("a");
System.out.println(sb1.equals(sb2)); //false
System.out.println(sb1==sb2); // false
自定义类中重新定义equals方法
class A {
    private int a;
    A() {
        a = 1;
    }
    public boolean equals(A b) {
        if (a == b.a)
            return true;
        else
            return false;
    }
}
A a = new A();
A b = new A();
System.out.println(a.equals(b)); //true
System.out.println(a == b);    //false
结论:如此可见 equals的意义取决于该对象中 对equals是否覆盖,以及覆盖后的意义。
ps:类定义时,常常需要根据自身需要覆盖  toString, equals等方法。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。