==
和 equals()
是在Java中比较两个对象是否相等的两种方式。
==
是一个运算符,用于比较两个对象的引用是否相等,即判断两个对象是否指向同一内存地址。当比较的对象是基本数据类型时,比较的是它们的值。例如:
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
equals()
是一个方法,用于判断两个对象的内容是否相等。它是由Object类提供的方法,所有的类都可以调用该方法,默认实现是比较两个对象的引用是否相等,即与==
的作用相同。但是,大部分类都会重写equals()
方法,用于根据对象的具体内容来决定相等的条件。例如:
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2)); // 输出 true
在比较自定义类的对象时,我们通常需要重写equals()
方法来比较对象的内容。例如:
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 == this) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age;
}
}
Person p1 = new Person("John", 25);
Person p2 = new Person("John", 25);
System.out.println(p1.equals(p2)); // 输出 true
总结而言,==
比较的是两个对象的引用是否相等,而equals()
比较的是两个对象的内容是否相等。在比较对象时,应根据具体的需求选择合适的比较方式。