Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

== 与 equals() 有什么区别?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

== 是运算符。用于基本类型时按语言规则比较值;用于引用类型时比较是否指向同一对象,或是否都为 null。equals() 是方法,具体语义由类定义。Object 的默认实现也比较对象身份,而 String 等类把它重写为内容比较。

讲清原理

两个盒子里装着一样的东西,不代表它们是同一个盒子。引用相同强调对象身份;内容相等强调类定义的值语义。equals 并不会自动逐个比较所有字段。

比较两个基本数值时,可能先发生数值提升;包装类型遇到基本类型还可能拆箱。不要把所有 == 的情况都套进“比较地址”的解释,Java 也不承诺给出可供业务使用的对象内存地址。

例子与易错点

String a = new String("hello");
String b = new String("hello");
System.out.println(a == b);       // false
System.out.println(a.equals(b)); // true

可能为 null 时,可以用 java.util.Objects.equals(a, b)。数组没有按内容重写 equals,比较数组内容应考虑 Arrays.equals 或 Arrays.deepEquals;不能因为 String 能比较内容,就认为所有引用类型都如此。

相关题:第 5 题、第 25 题、第 38 题、第 46 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。