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

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

相关推荐
ankleless3 分钟前
Spring Boot 实战:从项目搭建到部署优化
java·spring boot·后端
钢铁男儿19 分钟前
Python 正则表达式实战:解析系统登录与进程信息
开发语言·python·正则表达式
野生技术架构师41 分钟前
2025年中高级后端开发Java岗八股文最新开源
java·开发语言
静若繁花_jingjing1 小时前
JVM常量池
java·开发语言·jvm
David爱编程2 小时前
为什么线程不是越多越好?一文讲透上下文切换成本
java·后端
彷徨而立2 小时前
【C++】 using声明 与 using指示
开发语言·c++
A尘埃2 小时前
Redis在地理空间数据+实时数据分析中的具体应用场景
java·redis
csxin2 小时前
Spring Boot 中如何设置 serializer 的 TimeZone
java·后端
@半良人2 小时前
Deepseek+python自动生成禅道测试用例
开发语言·python·测试用例
一只鲲2 小时前
48 C++ STL模板库17-容器9-关联容器-映射(map)多重映射(multimap)
开发语言·c++