Java中"=="运算符和equals()方法之间的区别
在Java初学者访谈中,Java中equals()方法与相等运算符" =="之间的区别经常被问到。由于equals()和==运算符都用于比较,因此有必要知道这两者之间的差异,以确保根据情况正确使用其中的一个。
Java中的等于运算符" =="
Java中的Equal运算符用于比较两个原始值或者对象,以测试比较的原始值或者对象是否相等。对于基本类型(如int,long,float)," =="运算符可以很好地工作并比较变量的值,但对于对象,相等运算符不比较对象引用而不是其值。
例如
int a = 7;
int b = 8;
if(a == b){
System.out.println("Values are same");
}else {
System.out.println("Values are not same");
}
这里比较存储在变量中的值,因为这些值不相等,因此if条件失败。
对于对象-if(obj1 == obj2)相等运算符将比较对象引用,即两个对象的存储位置而不是值。对于对象" ==",运算符仅在两个对象具有相同的引用(即指向相同的存储位置)时才返回true。
Java中的equals方法
equals方法在Java的Object类中定义,用于内容比较。 Object类中的默认实现使用相等运算符进行比较。 equals方法的默认实现必须重写才能确定自定义对象的相等性。在类中,我们将必须重写和实现equals方法,以便可以比较该类的两个实例以确定两个实例在逻辑上是否相等。
例如,如果雇员类具有字段id,firstName和lastName,则可以使用这些字段编写equals方法,该方法可以比较两个Employee对象是否相等。
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Employee other = (Employee) obj;
if (empId != other.empId)
return false;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
return true;
}
好东西是Java中的包装器类(例如Integer,Float等)和String类会覆盖并提供equals方法的实现,因此我们无需为这些类执行此操作。
Java中equals()和" =="运算符之间的区别
由于我们对等价运算符和equals方法有很好的解释,因此让我们列出两者之间的区别
等于运算符和equals方法之间的第一个区别是" =="是Java中的运算符,而equals是方法。
相等运算符可用于比较基元和对象。 Equals方法只能与对象一起使用。
当使用相等运算符比较两个对象时,相等运算符比较对象引用。覆盖时等于方法可以对两个对象进行内容比较。
使用" =="和等于的示例
public class ComparisonDemo {
public static void main(String[] args) {
String str1 = new String("Code");
String str2 = new String("Code");
System.out.println("str1 == str2 " + (str1 == str2));
System.out.println("str1.equals(str2) " + (str1.equals(str2)));
}
}
输出:
str1 == str2 false str1.equals(str2) true
在代码中,有两个String对象str1和str2.
由于两个对象都有不同的引用,因此相等运算符将返回false。
两个String对象的内容相同,这就是为什么使用equals方法进行比较返回true的原因。
如果我们使用String文字而不是创建新的String对象,然后进行比较。请注意,在String文字的情况下,如果已经存在具有相同值的对象,则另一个文字也使用相同的引用。
public class ComparisonDemo {
public static void main(String[] args) {
String str1 = "Code";
String str2 = "Code";
System.out.println("str1 == str2 " + (str1 == str2));
System.out.println("str1.equals(str2) " + (str1.equals(str2)));
}
}
输出:
str1 == str2 true str1.equals(str2) true
由于两个String文字具有相同的值,因此它们共享相同的引用,因此这就是" =="运算符也返回true的原因。

