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的原因。