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,所以比的是字符串内容

  • 面试就按我刚才那段标准回答说,稳过

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐