美文网首页
Demo 展示 equal() 与 "==" 到底比较什么?

Demo 展示 equal() 与 "==" 到底比较什么?

作者: 叛逆的青春不回头 | 来源:发表于2020-02-24 16:15 被阅读0次

先看一个demo:

public class Equivalence {
    public static void main(String args[]) {
        Integer n1 = new Integer(24);
        Integer n2 = new Integer(24);
        int i = 2; 
        int j = 2;
        System.out.print(n1 == n2);  // false
        System.out.print(n1.equals(n2));  // true
        System.out.print (i == j);  // true
}

噢,从输出结果看出来了:“==”或“!=”比较的是栈上的内容,直接用于对象比较的话比较的是对象的引用,用于基本类型就是比较的值;那对的象内容怎么比较?使用equal()方法可达到目的。

貌似明白了点,继续来个demo:

public class Value {
    int i;
}
public class Equivalence {
    public static void main(String args[]){
        Value v1 = new Value();
        Value v2 = new Value();
        v1.i = v2.i = 100;
        System.out.print(v1.equals(v2));  // false
}

一个令人费解的答案…原来 equal() 的默认行为是比较引用,所以除非在自己的新类中覆盖了 equal() 方法,否则不可能表现出我们希望的行为。这里的Value类是自己新建的一个类,由于没覆写 equal() 方法,所以比较的是 v1 和 v2 的引用,输出为 false。

总结:
(1)“==”或“!=”比较的是栈上的内容,可直接用于基本类型值的比较,用于对象比较时是比较的对象的引用;
(2)equal()默认行为比较的是引用,在新类中覆盖equal()方法,用于对象内容的比较,可实现equal()比较对象内容的行为。

相关文章

网友评论

      本文标题:Demo 展示 equal() 与 "==" 到底比较什么?

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