📅  最后修改于: 2023-12-03 14:43:03.360000             🧑  作者: Mango
在Java中,字符串是一个非常常见的数据类型,而字符串的比较则是必不可少的操作。但是,对于字符串的比较,有两个方法:==运算符和equals()方法。这两种方法有什么区别呢?接下来我们来详细介绍。
==运算符在Java中是比较两个对象是否相等的方法,当且仅当两个对象在内存中地址相等时,==运算符才返回true。下面是一个例子:
String a = "hello";
String b = "hello";
if (a == b) {
System.out.println("a和b地址相等");
}
上面的代码输出的结果为“a和b地址相等”,因为a和b引用的是同一个字符串对象,所以它们的地址相等。
但是,如果我们写成下面的代码:
String a = "hello";
String b = new String("hello");
if (a == b) {
System.out.println("a和b地址相等");
}
输出的结果会是什么呢?事实上,输出结果为null,因为a和b引用的虽然是两个内容相等的字符串,但是它们的地址是不同的。
equals()方法是Java中判断两个对象是否相等的常用方法。和==运算符不同的是,equals()方法比较的是两个对象的内容是否相等。我们可以使用equals()方法将上面的代码修改为:
String a = "hello";
String b = new String("hello");
if (a.equals(b)) {
System.out.println("a和b内容相等");
}
上面的代码输出的结果为“a和b内容相等”,因为a和b所包含的内容都是“hello”。
需要注意的是,如果我们没有重写equals()方法,那么默认的判断机制也是比较对象的地址是否相等。因此,如果我们自定义一个对象需要使用equals()方法进行内容上的比较,就需要重写equals()方法。
class MyClass {
private int value;
public MyClass(int value) {
this.value = value;
}
// 重写equals()方法,判断传入的对象是否内容相等
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (!(obj instanceof MyClass)) {
return false;
}
MyClass mc = (MyClass) obj;
return mc.value == this.value;
}
}
MyClass mc1 = new MyClass(1);
MyClass mc2 = new MyClass(1);
if (mc1.equals(mc2)) {
System.out.println("mc1和mc2内容相等");
}
上面的代码中,我们自定义了一个MyClass类,并重写了它的equals()方法。实例化两个MyClass对象mc1和mc2,它们的value属性都是1,因此它们的内容相等。所以输出的结果为“mc1和mc2内容相等”。
总结一下,==运算符比较的是对象地址是否相等,而equals()方法比较的是对象的内容是否相等。如果需要比较对象的内容,那么我们应该使用equals()方法进行比较。