equals比较

版权声明:JAVA https://blog.csdn.net/weixin_43190126/article/details/84447876
package API;

public class EqulasTest {

	public static void main(String[] args) {
		Cat c1 = new Cat(1, 1, 1);
		Cat c2 =new Cat(1, 1, 1);
		System.out.println(c1==c2);			//比较的是两个Cat的地址,而不是值
		System.out.println(c1.equals(c2));		//原本比较的也是地址,但是因为有了下面的方法,才比较的是值
	}

}


		class Cat{		//猫类(下称子类)
			int color,weight,height;    //要比较的字段,也就是所谓的值
			public Cat(int color,int weight,int height){     //接受来自测试类的参数
				this.color = color;          //然后将就收的参数传给本类(猫类)的字段,也就是int color,int weight ,int height;
				this.weight = weight;
				this.height = height;
			}
			
			public boolean equals(Object obj) {   //好了这就是本片的主要部分了,这是一个判断的方法,其中Objectj就是传说中的超类(我喜欢称父类吧),obj就是多态变量
				if (obj==null) {	//如果变量中的值为空,那么就返回false(失败)
					return false;					
				}
				else {			
					if(obj instanceof Cat) {   	//先判断变量与子类之间是否有继承之类的关系,(本来是没有的,但是经过(从这一行数往上数)上面第五行 ),创建与超类的多态,所以就有关系了,(超类就是父类,猫类成了子类,obj成了变量,就是从这里开始的)			
						Cat c = (Cat)obj;	//	这一段就是多态的强制转换。(就是把自己的方法和值给父类)
					if(c.color==this.color&&c.weight==this.weight&&c.height==this.height) {	//然后这里就是进行判断,子类和父类的值比较(两个值c1,c2都各自与父类进行了比较)					
						return true; //如果子类的值与父类的值相比较是相等的,那么他们就相等,返回ture;
						}										
					}
				}
				return false;		//否则返回法false(失败)
			}		
}
				//整篇的代码思想就是:将c1与c2进行比较值是否相等,但是equals不能直接将他们相比较,因为直接比较的话就是比较的是地址而不是值,
				//所以才要找第三方的平衡,就是父类,但他们(Cat)没有父类所以就用超类创建多态,但是又因为超类(个人为了便于理解,嗯,就当他是空的)没有比较他们是否相等的能力,(这里的超类为了形象化就说成父类)
				//因为父类(Object)没有(不能调用)子类(Cat)的方法,所以就要进行强制转换,将自己的方法给父类,然后父类就有了与自己一样的方法,然后父类和子类就有了相同的方法,然后就将父类跟两个子类各自比较,
				//如果两个子类的值跟父类的值是相同的,那么他们就相等,如果他们有一个跟父类不相同,那么就不相等。(哎,真累!!!)
		
		
		

其实就是相当于一对分割几十年的兄弟,不知道自己是不是亲兄弟,但他们自己无法辨别,所以就都给自己的血液,送到基因鉴定所去鉴定(这样基因鉴定所才有他们的血液,才能对他们进行鉴别,不然没有鉴别能力),让基因鉴定所给自己鉴定,然后,基于鉴定所说他们是兄弟,他们就是兄弟,来自一个母体,携带相同基因。

猜你喜欢

转载自blog.csdn.net/weixin_43190126/article/details/84447876