Java“==”与“equals()”的区别
程序员文章站
2022-06-23 10:49:46
...
“==”与“equals()”的区别
例1:
public class Compare{
public static void main(String[] args){
Integer n1=new Integer(1);
Integer n2=new Integer(1);
System.out.println(n1==n2);
System.out.println(n1!=n2);
}
}
Output:
false
true
==与!=比较的是对象的引用,而非对象的实际内容
此处n1与n2虽然对象的内容相同,但对象的引用确实不同
例2:
public class Compare{
public static void main(String[] args){
Integer n1=new Integer(1);
Integer n2=new Integer(1);
System.out.println(n1.equals(n2));
}
}
Output:
true
此时equals比较两个对象的实际内容是否相同,而非对象的引用
例3:
class Value{
int i;
}
public class Compare{
public static void main(String[] args){
Value v1=new Value();
Value v2=new Value();
v1.i=1;
v2.i=1;
System.out.println(v1.equals(v2));
}
}
Output:
false
输出为false,说明此时equals()方法仍然比较的是对象的引用。
因为 equals()的默认行为仍是比较对象的引用,但大多数Java类库都实现了equals()方法以便用来比较对象的内容,而非对象的引用。
例2中Integer包装类的equals()已经实现了重载,例3中自己创建的Value类没有重载
此处需要重载equal()方法去比较对象的内容
例4:
class Value{
int i;
public boolean equals(Value v){
return this.i==v.i?true:false;
}
}
public class Compare{
public static void main(String[] args){
Value v1=new Value();
Value v2=new Value();
v1.i=1;
v2.i=1;
System.out.println(v1.equals(v2));
}
}
Output:
true
此处重载了Value类的equals()方法,比较的是对象的内容
上一篇: 字典树略解