== 和 equals() 有什么区别?
== 和 equals() 都是 Java 中比较对象的方法,但是它们的作用和实现方式不同。本文将详细介绍 == 和 equals() 的区别,并提供相关代码进行演示。
== 的作用
== 用于比较两个对象的内存地址是否相等,即是否是同一个对象。如果两个对象的地址相等,返回 true,否则返回 false。
下面是一个示例代码:
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
上述代码中,s1 和 s2 都是使用相同的字符串常量 “hello” 初始化的,它们指向的是同一个对象,因此 s1 == s2 返回 true。而 s3 是通过 new 关键字创建的新对象,与 s1 和 s2 指向的对象不同,因此 s1 == s3 返回 false。
equals() 的作用
equals() 用于比较两个对象是否相等,即对象的内容是否相同。Object 类中的 equals() 方法是使用 == 进行对象比较的,因此如果没有重写 equals() 方法,那么调用 equals() 方法和调用 == 方法的效果是相同的。
例如,下面是一个示例代码:
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // true
在上述代码中,s1 和 s2 的值相同,因此它们调用 equals() 方法返回 true。s3 虽然是一个新的对象,但它的值与 s1 和 s2 相同,因此也返回 true。
== 和 equals() 的区别
== 比较的是两个对象的内存地址,而 equals() 比较的是两个对象的内容。
例如,下面是一个示例代码:
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
在上述代码中,s1 和 s2 是两个新的对象,它们的内存地址不同,因此 s1 == s2 返回 false。但是它们的内容相同,因此 s1.equals(s2) 返回 true。
此外,equals() 方法可以被重写,使其能够比较对象的内容,而不仅仅是比较对象的内存地址。例如,下面是一个重写 equals() 方法的示例代码:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age;
}
return false;
}
}
- 点赞
- 收藏
- 关注作者
评论(0)