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.常见错误

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

相关推荐
Re_zero13 小时前
线上日志被清空?这段仅10行的 IO 代码里竟然藏着3个毒瘤
java·后端
洋洋技术笔记13 小时前
Spring Boot条件注解详解
java·spring boot
牛奶1 天前
Vue 基础理论 & API 使用
前端·vue.js·面试
牛奶1 天前
Vue 底层原理 & 新特性
前端·vue.js·面试
NAGNIP1 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
青青家的小灰灰1 天前
深入理解事件循环:异步编程的基石
前端·javascript·面试
程序员清风1 天前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林5511 天前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
UrbanJazzerati1 天前
Vue3 父子组件通信完全指南
前端·面试
UrbanJazzerati1 天前
Vue 3 纯小白快速入门指南
前端·面试