Java面试题:equals和==的区别与联系分别是什么?

1. ==运算符

  • ==是一个运算符,其用于比较两个变量的内存地址是否相等;
  • 对于基本数据类型(int、char、Boolean等),==比较的是它们的值;
  • 而对于引用数据类型的话(String、Object、ArrayList等),==比较的是引用,也就是对象在内存中的地址,即检查两个引用是否指向堆内存中的同一个对象实例。

代码举例:

java 复制代码
public class Main {
    public static void main(String[] args) {
        int a = 100;
        int b = 100;
        System.out.println(a == b);

        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println(str1 == str2);
    }
}

第一次输出结果为true,因为a和b都是基本数据类型,==比较的是他们两个的值是否相等;第二次的输出结果为false,因为str1和str2都是引用数据类型,==比较的是他们两个在内存中的地址。

2. equals()方法

equals()是Object类中的方法,默认实现的是比较两个对象的内存地址是否相等,即与==相同。

许多类(如String、Integer、List等)重写了equals(方法),用于比较对象的内容是否相等,而不仅仅是内存地址。

在Java中,如果两个对象的内存地址相等,即它们是同一个对象的引用,那么它们的内容也一定是相等的。这是因为内存地址相等意味着它们指向堆内存中的同一个对象实例。相反,如果两个对象的内容相等,并不意味着它们的内存地址一定相等,除非它们是同一个对象的引用。

代码举例:

java 复制代码
public class Main {
    public static void main(String[] args) {
        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println(str1.equals(str2));

        Integer num1 = new Integer(666);
        Integer num2 = new Integer(666);
        System.out.println(num1.equals(num2));
    }
}

两次运行结果均为true;

3. 适用场景

  • ==更适合于比较基本数据类型,或者是判断两个对象是否是同一个引用;
  • equals()更适合用于比较两个对象的内容是否相等。

4.常见错误

初学者很容易误用==来比较字符串或对象的内容,从而导致了比较结果不符合预期。

相关推荐
澈2075 分钟前
构造函数与析构函数完全指南
开发语言·c++
W23035765739 分钟前
C++ 高并发线程池实战(二):动态缓存线程池 + 调用者运行拒绝策略完整版实现
开发语言·c++·缓存
气宇轩昂固执狂11 分钟前
01-初识C语言
c语言·开发语言
BullSmall13 分钟前
Redis 双机部署 完整方案(两种架构,适配两台机器)
java·redis·架构
t***54419 分钟前
如何在 Dev-C++ 中使用 Clang 编译器
开发语言·c++
cany100042 分钟前
C++ - 智能指针
开发语言·c++
我要升天!1 小时前
C语言连接 MySQL:libmysqlclient 获取方式详解
c语言·开发语言·数据库·mysql·adb
angushine1 小时前
Python常用方法
开发语言·前端·python
潜创微科技1 小时前
CH9245:双 Type‑C 转 PD 芯片方案,便携显示与拓展坞的理想选择
c语言·开发语言