在java中一般不使用“==”而使用“equals”来比较两个值是否相等。
在java中使用“==”是指左右两边所指向的内存地址相同。equals用于比较引用对象值是否相同。equals不是final方法所以可以被重写。
由于equals的参数是对象,所以不引入任何包时,equals依旧比较的是对象是否相同而不比较其值。但当引入java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)时,equals用于当对象类型和值一致返回true。
--------------------------------------------------------------------------------------------------------------------------------------
//equals方法及如何覆盖
public class L3_1 {
public static void main (String[] args)
{
B b1 = new B(20);
B b2 = new B(20);
System.out.println(b1==b2);//==比较的内存是内存地址,而不是对象中的具体属性
System.out.println(b1.equals(b2));//因为equals的参数类型为object,所以比较的还是内存地址
C c1=new C(10);
C c2=new C(10);
System.out.println(c1.equals(c2));
}
}
class B
{
private int i;
B(int i)
{
this.i=i;
}
public boolean equals(B b2)
{
//覆盖后的equals方法比较的不再是比较内存地址,而是根据自己的需求来定
if(this.i==b2.i )
return true;
else
return false;
}
}
class C extends B
{
//多态:在C类中使用的只能是从B类中继承的方法和变量
private int j;
C(int j)
{
super(j);
this.j=j;
}
public boolean equals(B b2)
{
//要使用B自己的j变量需要重写equals方法
C c=(C)b2;
if(this.j==c.j)
return true;
else
return false;
}
}