每日一道面试题 14:== 和 equals 的区别是什么?(面试必问基础题)

张开发
2026/4/16 19:51:39 15 分钟阅读

分享文章

每日一道面试题 14:== 和 equals 的区别是什么?(面试必问基础题)
一、先说结论面试开口第一句如果是基本类型比较的是值如果是引用类型比较的是内存地址。equals()默认和一样比较地址但重写后可以比较内容如 String、Integer 都重写了。二、 到底比较什么分两种情况1. 比较基本数据类型byte、short、int、long、float、double、char、boolean只比较值是否相等值一样结果就是true例int a 10; int b 10; System.out.println(a b); // true2. 比较引用数据类型对象比较的是两个对象的内存地址是否一样地址一样才是同一个对象返回true例User u1 new User(); User u2 new User(); System.out.println(u1 u2); // false两个不同对象三、equals 方法是什么equals是Object类里的方法默认源码就是 public boolean equals(Object obj) { return (this obj); }所以没重写 equals和完全一样比地址重写 equals一般改成比较对象内容比如按 id、name 比较四、String 中的 equals高频考点String 已经重写了 equals比较的是字符串内容String s1 new String(abc); String s2 new String(abc); System.out.println(s1 s2); // false地址不同 System.out.println(s1.equals(s2)); // true内容相同五、Integer 等包装类高频坑点Integer、Long、Boolean都重写了equals比较值Integer a 128; Integer b 128; System.out.println(a b); // false超出常量池范围 System.out.println(a.equals(b)); // true六、面试高频追问1. 为什么重写 equals 一般也要重写 hashCode约定equals 相等的两个对象hashCode 必须相等如果只重写 equals 不重写 hashCode会导致 HashMap、HashSet 等集合工作异常2. 什么时候用 什么时候用 equals比较基本类型用比较字符串、包装类内容用equals比较自定义对象是否同一个用比较自定义对象内容是否相同重写equals后调用七、总结对基本类型比值对引用类型比地址equals默认比地址重写后比内容字符串、包装类都已重写 equals业务比较优先用 equals。

更多文章