Java中操作符==和!=是基本数据类型之间进行比较的操作符,两个基本类型之间比较后得到true或false,当遇到引用对象的时候再使用操作符比较的就是引用,而不是对象,所以就要使用equals方法。
public static void main(String[] args){
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
打印结果:
打印结果跟预想的结果并不符合,这就是因为操作符==和!=比较的是引用,而不是对象的值。那想对比对象的值,就需要使用equals方法,进行比较。如下:
但是还有一种特殊情况,会让equals方法出现费解的情况,若我们自己定义了一个类,然后使用该类定义对象的引用,并初始化改对象,然后进行比较,会出现出人意料的情况,代码如下:
public class JavaEqualsFunction {
int i;
}
首先定义JavaEqualsFunction 类,并定义int i属性,然后创建该类的引用并初始化对象,代码如下;
public static void main(String[] args){
JavaEqualsFunction javaEqualsFunction1 = new JavaEqualsFunction();
javaEqualsFunction1.i=66;
JavaEqualsFunction javaEqualsFunction2 = new JavaEqualsFunction();
javaEqualsFunction2.i=66;
System.out.println(javaEqualsFunction1.equals(javaEqualsFunction2));
}
打印结果如下:
事情再次变得令人费解,结果又是false。这是因为equals方法默认比较的就是引用,所以除非在自己的新类中覆盖该方法,否则不可能出现我们希望的情况,覆盖该类在后边更新。