这是我从我看的"Thinging in java"中总结出来的,代码基本上都是这本书里的.
我们首先看一段java代码:
public class Test1{
Integer n1=new Integer(47);
Integer n2=new Integer(47);
public static void main(String [] arg){
System.out.println(n1==n2);
System.out.println(n1!=n2);
}
}
//结果:false
// true
原因分析:==和!=比较的是对象的引用,两个对象虽然是内容是相同的但是对象的引用不同所以就有了上面的结果.那么如果想比较两个对象的内容是否相同,又该如何操作?可以使用对所有对象都适用的方法equals()方法.因为equals()方法是所有对象的父类Object 类定义的方法.请看下面代码:
public class Test2{
Integer n1=new Integer(47);
Integer n2=new Integer(47);
public static void main(String [] arg){
System.out.println(n1.equals(n2));
}
}
//结果:true
也许这没有我们想的那么简单.请看下面的代码:
class Value{
int i;
}
public class Test3 {
public static void main(String [] arg){
Value v1=new Value();
Value v2=new Value();
v1.i=100;
v2.i=100;
System.println(v1.equals(v2));
}
}
//结果:false.
也许我们会为此感到奇怪.这是因为equals()在Object类中默认是比较引用的.如果不在子类中覆盖父类中定义的equals()方法比较的并不是类的内容.请看下面我覆盖equals()方法后的代码:
class Value{
int i;
public Value(int i){
this.i=i;
}
public boolean equals(Value v)
{
return this.i==v.i;
}
public Value(int i){
this.i=i;
}
public boolean equals(Value v)
{
return this.i==v.i;
}
}
public class Test{
public static void main(String[] arg)
{
Value v1=new Value(100);
Value v2=new Value(100);
System.out.println(v1.equals(v2));
}
{
Value v1=new Value(100);
Value v2=new Value(100);
System.out.println(v1.equals(v2));
}
}
//结果:true
//这就和我们所想的一致了.