【Java基础面试题】==与equals方法的区别

81 阅读1分钟

== 等号

1.操作基本数据类型时,是比较值是否相等

public class Demo {
    public static void main(String[] args) {
        int a = 16;
        if (a%2==0){
            System.out.println("偶数");
        } else {
            System.out.println("奇数");
        }
    }
}

//偶数

2.当比较引用数据类型时,是比较对象引用地址是否一致,也就是比较是否为同一对象

public class Demo {
    public static void main(String[] args) {
        Point p1 = new Point(2,3);
        Point p2 = new Point(3,4);
        Point p3 = p1;
        System.out.println(p1==p2);  //false
        System.out.println(p3==p1);  //true
    }
}

equals()方法

equals()方法是Object类中的方法,设计初衷是要比较两个对象内容是否一致;

image.png 但看源码可知,这里仍然使用的==实现,因为严谨来说Object层不知道对象的特征,
两个对象是同一对象时才完全相同;
所以Java建议我们在你自己的类中要改写equals()方法;
idea中可以右键Generate..直接生成equals方法;

image.png 逻辑上先比较了是否是同一对象,是则true、
对象o是null则false、两个对象的运行时类不同则返回false、 两对象实例变量值相同则返回true;

其它的一些我们常用的类也都改写了equals方法,比如String:

image.png 可以看到也是同对象则true、不同对象字符串中字符完全一致的则true;

所以总结一下,equals方法的作用要看各个类重写后的比较逻辑,一般来说是同对象则true、
不同对象的,对象中的内容完全相同的则true。