equals和==的区别
时间: 2023-09-04 07:10:38 浏览: 86
在Java中,equals和==都是用于比较两个对象是否相等的操作符,但它们的作用有所不同。
==是一个比较运算符,用于判断两个对象的地址是否相同。如果两个对象的地址相同,则它们一定是同一个对象;如果它们的地址不同,则它们是不同的对象。例如:
```
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
```
equals是一个方法,用于比较两个对象的内容是否相同。默认情况下,equals方法比较的是两个对象的地址,即与==的作用相同。但是,可以通过重写equals方法来改变比较的方式。例如:
```
public class Person {
private String name;
private int age;
public boolean equals(Object obj) {
if (this == obj) {
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("Tom", 18);
Person p2 = new Person("Tom", 18);
Person p3 = new Person("Jerry", 20);
System.out.println(p1 == p2); // false
System.out.println(p1.equals(p2)); // true
System.out.println(p1.equals(p3)); // false
```
在上面的例子中,我们重写了Person类的equals方法,比较的是两个对象的name和age属性是否相同。因此,p1和p2虽然是不同的对象,但它们的内容相同,equals方法返回true。
总之,==比较的是两个对象的地址,而equals比较的是两个对象的内容。如果需要比较两个对象的内容,应该使用equals方法而不是==操作符。
阅读全文