==
操作符
==
操作符用于比较两个变量的值是否相等。在比较基本数据类型时,==
比较的是它们的值是否相同。在比较引用类型时,==
比较的是它们在内存中的地址是否相同,即两个引用是否指向同一个对象。
基本数据类型示例:
int a = 5;
int b = 5;
System.out.println(a == b); // 输出 true
引用类型示例:
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // 输出 false,因为 str1 和 str2 指向不同的对象
equals
方法
equals
方法用于比较两个对象的内容是否相同。equals
方法是 Object
类中的一个方法,所有的 Java 对象都继承了这个方法。默认情况下,equals
方法和 ==
操作符的行为是一样的,即比较的是对象的引用是否相同。不过,很多类(如 String
、Integer
等)覆盖了这个方法,用于比较对象的内容是否相同。
String
类的示例:
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2)); // 输出 true,因为 str1 和 str2 的内容相同
覆盖 equals
方法的示例
假设我们有一个简单的类 Person
,它有两个属性:name
和 age
。我们希望比较两个 Person
对象时,不仅仅是比较它们的引用是否相同,而是比较它们的 name
和 age
是否相同。我们可以通过覆盖 equals
方法来实现。
Person
类代码:
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 (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
public static void main(String[] args) {
Person person1 = new Person("John", 25);
Person person2 = new Person("John", 25);
Person person3 = new Person("Jane", 30);
System.out.println(person1 == person2); // 输出 false,因为 person1 和 person2 指向不同的对象
System.out.println(person1.equals(person2)); // 输出 true,因为 person1 和 person2 的内容相同
System.out.println(person1.equals(person3)); // 输出 false,因为 person1 和 person3 的内容不同
}
}
总结
==
操作符用于比较两个变量是否指向同一个对象,即比较它们的内存地址是否相同。equals
方法用于比较两个对象的内容是否相同。String
等类覆盖了equals
方法以实现内容比较。- 如果一个类没有覆盖
equals
方法,那么它默认的实现是和==
操作符一样的,比较的是对象的引用是否相同。要实现内容比较,需要覆盖equals
方法。