-
情况一:当类没有重写
equals()
方法时,通过equals()
来比较该类的两个对象时就等价于通过==
比较这两个对象。 -
情况二:当类重写了
equals()
方法时,这是我们比较常用的方式。此时,我们通常通过重写equals()
方法来判断两个对象的内容相等,若它们的内容相等,则返回 true。
代码示例:
public class test1 {
public static void main(String[] args) {
String a = new String(“ab”); // a 为一个引用
String b = new String(“ab”); // b为另一个引用,对象的内容一样
String aa = “ab”; // 放在常量池中
String bb = “ab”; // 从常量池中查找
if (aa == bb) // true
System.out.println(“aa==bb”);
if (a == b) // false,非同一对象
System.out.println(“a==b”);
if (a.equals(b)) // true
System.out.println(“aEQb”);
if (42 == 42.0) { // true
System.out.println(“true”);
}
}
}
说明:
-
String 类中的 equals 方法是被重写过的,因此String 的 equals 方法比较的是对象的值,而 Object 的 equals 方法是比较的对象的内存地址;
-
当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。
============================================================================================
hashCode 的作用是用来获取哈希码,也可以称作散列码,实际返回值为一个 int 型数据,常用于确定对象在哈希表中的位置。
因为超类 Object 中有 hashcode 方法,也就意味着所有的类都有 hashCode 方法。
示例:如下通过重写 equal 方法,使得两个对象内容相同,然后这两个对象的哈希码并不相同。
public class EqualTest {
public static void main(String[] args) {
Person p1 = new Person(10, “张三”);
Person p2 = new Person(10, “张三”);
System.out.println(
“p1.equals(p2)=” + p1.equals(p2) + “, p1.hashcode=” + p1.hashCode() + “, p2.hashcode=” +p2.hashCode());
}
}
class Person {
int age;
String name;
……
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
Person other = (Person) obj;
if (age != other.age) return false;
if (name == null) {
if (other.name != null)
总结
以上是字节二面的一些问题,面完之后其实挺后悔的,没有提前把各个知识点都复习到位。现在重新好好复习手上的面试大全资料(含JAVA、MySQL、算法、Redis、JVM、架构、中间件、RabbitMQ、设计模式、Spring等),现在起闭关修炼半个月,争取早日上岸!!!
下面给大家分享下我的面试大全资料
- 第一份是我的后端JAVA面试大全
后端JAVA面试大全
- 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
- 第三份是Spring全家桶资料
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
14124247080)]
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
- 第三份是Spring全家桶资料
[外链图片转存中…(img-8OM1ICkr-1714124247080)]
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理