Java面试题:== 和 equals 的区别是什么?

本文将介绍在 Java 中 == 和 equals 的区别是什么?

“==”运算符

首先,要肯定“==”是 Java 中的一个运算符。

如果使用“==”运算符对基本数据类型(如:int、long、float、double 等)进行操作,则比较的是变量中存储的实际值。例如:

int a = 10;
int b = 20;
if(a == b) {
    //...
}

上面代码中,“==”运算符则是对 10 和 20 进行比较。

如果使用“==”运算符对引用数据类型(如:String、Object 等)进行操作,则比较的是引用类型变量指向对象的地址值。例如:

// java.lang.Object@b684286
Object a = new Object();
// java.lang.Object@880ec60
Object b = new Object();
if(a == b) {
    System.out.println("a == b");
}

上面代码中,“==”运算符则是对 a 和 b 变量的值,即对象在堆中的地址进行比较,而不是对对象的实际值进行比较。

equals() 方法

equals 是 Object 类的方法,用来比较两个对象的内容是否相等。下面看看 Object 类中equals() 方法的实现:

public boolean equals(Object obj) {
    return (this == obj);
}

注意:equals 方法不能用于比较基本数据类型(如:int、long、float、double等)。如果在自定义的对象中没有对 equals() 方法进行重写,则相当于“==”,比较的是引用类型的变

量所指向的对象的地址值。

一般情况下,类会重写 equals 方法用来比较两个对象的内容是否相等。例如 String 类中的 equals() 就被重写了,比较的是对象的值。源代码如下:

public boolean equals(Object anObject) {
    // 如果两者指向堆中同一个地址,则返回 true
    if (this == anObject) {
        return true;
    }
    
    // 如果 anObject 不是 String 的实例,则返回 false。否则,继续比较
    if (anObject instanceof String) {
        String aString = (String)anObject;
        if (coder() == aString.coder()) {
            return isLatin1() ? StringLatin1.equals(value, aString.value)
                              : StringUTF16.equals(value, aString.value);
        }
    }
    return false;
}
生活总会给你答案的,但不会马上把一切都告诉你。只要你肯等一等,生活的美好,总在你不经意的时候,盛装莅临。
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号