Java equals()方法示例
Java equals()方法和“==”运算符都用于比较对象的相等性。然而,他们以一种非常不同的方式进行检查,产生不同的结果。
它们之间的主要区别是“==”检查两个对象是否指向同一个内存位置,equals()计算结果与对象中包含的实际值的比较。
举个例子会给你更多的线索:
动物.java
public class Animal {
private String name;
private int age;
public Animal (String n, int a) {
this.name = n;
this.age = a;
}
}
EqualsDemo.java
public class EqualsDemo {
public static void main(String[] args) {
Animal animal1 = new Animal("Vic", 4);
Animal animal2 = new Animal("Vic", 4);
if (animal1 == animal2)
System.out.println("These objects are equal.");
else
System.out.println("These objects are not equal.");
}
}
你觉得会印什么?
输出
These objects are not equal.
即使这两个对象都是同一个类的实例并包含相同的值,但它们并不引用同一个对象。每当你输入 new关键字时,它会自动创建一个新的对象引用。当我们使用 new关键字创建两个对象时,它们是不一样的,即使它们包含相同的值也是不一样的。它们指向不同的内存位置。
使用equals()方法和“==”运算符比较字符串
EqualsDemo.java
public class EqualsDemo {
public static void main(String[] args) {
String str1 = "First string";
String str2 = "First string";
if (str1 == str2)
System.out.println("Equal");
else
System.out.println("Not equal");
}
}
你觉得屏幕上会印什么?
输出
Equal
如果你说相等,那你就对了。当字符串包含相同的cont时
Not equal
他们指向同一个记忆位置。
现在让我们来做一个与上面完全相同的例子,但是要使用 new关键字。
创建与new关键字相同的内容字符串
EqualsDemo.java
public class EqualsDemo {
public static void main(String[] args) {
String str1 = new String("First string");
String str2 = new String("First string");
if (str1 == str2)
System.out.println("Equal");
else
System.out.println("Not equal");
}
}
你觉得现在会印什么?
**输出
**
Not equal
不相等之所以被打印出来是因为,正如我前面所指出的,当我们使用 new关键字创建对象时,我们将创建一个指向其自身内存位置的新指针。
这是一个直观的例子。记忆的位置是刚刚组成的。但是从这个例子中可以看出,当str1被创建和str2被创建时,它们指向不同的内存位置。因此,当你使用==运算符来比较它们时,不管怎样都会得到false。
重写equals()方法以匹配条件
假设我们想对两个对象调用.equals(),如果它们包含相同的名称和年龄,它应该返回true。
动物.java
public class Animal {
private String name;
private int age;
public Animal (String n, int a) {
this.name = n;
this.age = a;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public boolean equals(Animal a) {
if (this.name.equals(a.getName()) && this.age == a.getAge())
return true;
else
return false;
}
}
EqualsDemo.java
public class EqualsDemo {
public static void main(String[] args) {
Animal animal1 = new Animal("Vic", 4);
Animal animal2 = new Animal("Vic", 4);
if (animal1.equals(animal2))
System.out.println("These objects are equal.");
else
System.out.println("Not equal");
}
}
输出
These objects are equal.
我们重写了Animal类中的equals方法,以便它符合我们自己的标准。如果我们不重写它并简单地对两个对象调用equals方法,它将不会返回true。
对字符串调用equals()
EqualsDemo.java
public class EqualsDemo {
public static void main(String[] args) {
String str1 = "str";
String str2 = "str";
if(str1.equals(str2)) {
System.out.println("equal");
}
else {
System.out.println("not equal");
}
}
}
输出
equal
当对字符串调用equals()时,它会检查两个字符串中的每个字符是否相同。也就是说,在比较字符串时,应该始终使用[equals],而不是 ==。
对使用新关键字创建的字符串调用等于
EqualsDemo.java
public class EqualsDemo {
public static void main(String[] args) {
String str1 = new String("str");
String str2 = new String("str");
if(str1.equals(str2)) {
System.out.println("equal");
}
else {
System.out.println("not equal");
}
}
}
输出
equal
如我们所见,使用equals时,这两个对象(字符串)是否指向不同的内存位置并不重要。如果两个字符串中的内容相同,则返回true。
说明
比较字符串时,应始终使用.equals()和not==。

