在阐述==与equals的区别之前,我们先来看一段代码:
package com.hjp.test;
/**
* 测试对象的等价性( == 与 equals)
* @ClassName: Equivalence
* @author: huangjp
* @date: 2017年3月7日 下午4:15:07
*/
public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
}
}
猜一猜输出的结果是什么?以下是输出的结果:
false
小伙伴一定很困惑,明明这两个对象的内容是一模一样的,为什么结果是不相等的呢?事实上,== 比较的是对象的引用,n1与n2是两个引用,所以它们是不相等的。那么,当我们只想比较两个对象的内容时,该如何操作呢?
此时,必须使用equals()方法,下面举例说明如何使用:
package com.hjp.test;
/**
* 测试对象的等价性(== 与 equals)
* @ClassName: Equivalence
* @author: huangjp
* @date: 2017年3月7日 下午4:15:07
*/
public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
}/* Output:
true
*///~
需要注意的是,equals()这个方法并不是适用于基本类型,基本类型直接使用==和!=即可。
然而,这还没完,假设你创建了自己的类,并使用equals()方法进行比较对象的内容,就像下面这样:
package com.hjp.test;
/**
* 测试对象的等价性(== 与 equals)
* @ClassName: Equivalence
* @author: huangjp
* @date: 2017年3月7日 下午4:15:07
*/
public class Equivalence {
public static void main(String[] args) {
equalsMethod();
}/* Output:
false
*///~
public static void equalsMethod(){
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2)); //output:false
}
static class Value{
int i;
}
}
答案又是false,为什么呢?明明v1与v2的内容是一样的。这是由于equals()的默认行为是比较对象的引用。所以除非在自己的新类中覆盖equals()方法,否则不可能表现出我们希望的行为。(String类就是一个例子)
幸运的是,大多数Java类库都实现了equals()方法,以便用来比较对象的内容,而非比较对象的引用。
本文就阐述到这里,感兴趣的小伙伴可以加入我们的QQ群:372702757,欢迎大家来讨论。