Equals方法
java中一般情况下,不可以再用==来比较是否相等的情况,而是要用Equals方法来比较,Equals方法属于Object类且不是final类型,所以任何类都可以继承并且覆盖该方法。
注意:对象之间不可以再用“==”来进行比较,因为这样比较的是对象的内存地址,而不是对象中的具体属性。
java中一般情况下,不可以再用==来比较是否相等的情况,而是要用Equals方法来比较,Equals方法属于Object类且不是final类型,所以任何类都可以继承并且覆盖该方法。
注意:对象之间不可以再用“==”来进行比较,因为这样比较的是对象的内存地址,而不是对象中的具体属性。
覆盖后的equals方法比较的不再是两个对象的内存地址,而是根据自己的需求来角id那个,本例中比较的是变量i的值,当两个对象的i都等于20,此时两个对象的比较结果返回了true
import java.util.*;
public class Test3_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));
C c1=new C(100,50);
C c2=new C(100,60);
System.out.println(c1.equals(c2)); //假如C类没有定义equals方法重写,直接调用equals方法,
//那么调用的是父类中的equals方法,所比较的依然是i值的大小。B类指向C类对象,是多态,
//如果要比较j的值,则不能使用继承过来的方法,需要在子类中写equals方法覆盖
}
}
class B{
private int i;
B(int i)
{
this.i=i;
}
boolean equals(B b2){
if (this.i==b2.i)
return true;
else
return false;
}
}
class C extends B{
private int j;
C(int i, int j){
super(i); //这句如果不写还得找父类无参的构造方法
this.j=j;
}
/*
public boolean equals(B b2){ //这里参数写“C c2”当然也可以~
C c=(C)b2; //如果需要使用C类的属性需要将b类型再强制转换
if(this.j==c.j)
return true;
else
return false;
}*/
}