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

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

相关推荐
姓蔡小朋友20 小时前
Java 定时器
java·开发语言
crossaspeed20 小时前
Java-SpringBoot的启动流程(八股)
java·spring boot·spring
百锦再21 小时前
python之路并不一马平川:带你踩坑Pandas
开发语言·python·pandas·pip·requests·tools·mircro
灏瀚星空21 小时前
基于 Python 与 GitHub,打造个人专属本地化思维导图工具全流程方案(上)
开发语言·人工智能·经验分享·笔记·python·个人开发·visual studio
是Dream呀21 小时前
Python从0到100(一百):基于Transformer的时序数据建模与实现详解
开发语言·python·transformer
草莓熊Lotso21 小时前
Python 入门超详细指南:环境搭建 + 核心优势 + 应用场景(零基础友好)
运维·开发语言·人工智能·python·深度学习·学习·pycharm
*TQK*21 小时前
Python中as 的作用
开发语言·python
维他奶糖6121 小时前
Python 实战:Boss 直聘职位信息爬虫开发全解析
开发语言·爬虫·python
这儿有个昵称21 小时前
互联网大厂Java面试场景:从Spring框架到微服务架构的提问解析
java·spring boot·微服务·kafka·grafana·prometheus·数据库优化
颜颜yan_21 小时前
Python中秋月圆夜:手把手实现月相可视化,用代码赏千里共婵娟
开发语言·python·可视化·中秋节