【Java高频面试题大全集】Java 后端面试突击:20 道必问真题精讲(1)== 和 equals 到底有什么区别?
Java 后端面试突击:20 道必问真题精讲(1)== 和 equals 到底有什么区别?
大家好,这一节我们来讲一道Java 面试必问的基础题:
== 和 equals 到底有什么区别?
很多同学只会背结论:“== 比较地址,equals 比较内容”。但面试官一追问,就答不上来。这节课我带你把原理一次性讲透。
一、先说 == 的作用
在 Java 里,== 只有两种作用:
-
如果是基本数据类型(byte、short、int、long、float、double、char、boolean)== 比较的是:值是否相等。
-
如果是引用类型(对象、String、自定义类)== 比较的是:两个对象的内存地址是否一样也就是:是不是同一个对象。
二、再说 equals 方法
equals 是 Object 类里的方法。在 Object 里,默认实现就是:return (this == obj);
JDK的Object类重写了equals方法
也就是说:如果一个类没有重写 equals,那 equals 和 == 效果完全一样,都是比地址。
只有像 String、Integer、包装类、集合类 这些,重写了 equals 方法,才会去比较内容。
三、重点:String 的坑(面试最爱问)
看这段代码:
String s1 = "abc";String s2 = "abc";String s3 = new String("abc");
问题:
-
s1 == s2 吗?
-
s1 == s3 吗?
-
s1.equals (s3) 吗?
答案:
-
s1 == s2 → true(都在常量池,同一个对象)
-
s1 == s3 → false(new 一定产生新对象,地址不同)
-
s1.equals(s3) → true(String 重写了 equals,比内容)
四、面试标准回答(背会这段就能过)
你可以直接这样回答面试官:
-
==
-
基本类型:比较值
-
引用类型:比较内存地址
-
-
equals
-
默认和 == 一样,比地址
-
但 String、Integer 等类重写了 equals,变成比较内容
-
-
总结一句话:== 比地址,equals 比内容(前提是重写过)。
五、面试官最爱追问的一句
问:你自己写一个类,怎么让 equals 比较内容?
答:重写 equals 方法,同时一般也要重写 hashCode。(简单提一句就行,不用展开太多。)
六、本节课总结
-
==:基本类型比值,引用类型比地址
-
equals:默认比地址,重写后比内容
-
String 因为重写了 equals,所以比的是字符串内容
-
面试就按我刚才那段标准回答说,稳过
更多推荐




所有评论(0)