在Java中 == 和 equals 的区别
时间: 2023-09-04 19:10:44 浏览: 106
在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
```
在上面的代码中,str1 和 str2 指向同一个字符串对象,因此 str1 == str2 的结果为 true。而 str3 是通过 new 关键字创建的一个新的字符串对象,它与 str1 和 str2 的引用不同,因此 str1 == str3 的结果为 false。
equals 方法用于比较两个对象的内容是否相等,即比较两个对象的值是否相等。通常情况下,我们需要自己重写 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 == null || !(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age;
}
}
Person p1 = new Person("Tom", 20);
Person p2 = new Person("Tom", 20);
System.out.println(p1.equals(p2)); // true
```
在上面的代码中,我们重写了 Person 类的 equals 方法,定义了当两个 Person 对象的 name 和 age 属性都相等时,它们是相等的。因此,p1 和 p2 的 equals 方法返回 true。
总之,== 操作符比较两个对象的引用,equals 方法比较两个对象的内容。在实际开发中,我们要根据具体的需求来选择使用哪个方法。
阅读全文