J2se eQuals用法

  equalsObject类中方法。判定两个对象是否相同。定义为 x.queals(y),当xy是同一个对象的应用返回true

否则返回false

J2set提供了一些类,重写了objectqueal用法,判断所引用的对象是否为同一个类且属性内容相同时返回true

下面我们看一个小测试

public class equal{
	public static void main(String[] args){
		cat c1=new cat();
		cat c3=new cat();
		System.out.println(c1==c3);
	}
	}
 class cat{
	int color;
	int height,weight;

 }


输出为

J2se eQuals用法

 

不一样,是不是体重和颜色高度不一样才造成的呀,那么我们写一个构造函数,让他们都一样,在看看效果

 

public class equal{
  public static void main(String[] args){
    cat c1=new cat(1,2,3);
    cat c3=new cat(1,2,3);
    System.out.println(c1.equals(c3));
  }
}
 class cat{
   intcolor;
   intheight,weight;
 
public cat (int color,int height,int weight){
   this.color=color;
   this.height=height;
   this.weight=weight;
  }
 }

再来看一下编译效果/还是false

J2se eQuals用法

 

为何会这样呢,永远都不相同。这是equals的默认比较,它比较的是当前对象和比较对象是否相同(x==y)和刚

才的写法是一样的。

 

我们来解释下吧。他们比较的是地址,看内存分布图。new出来的两个对象引用始终是不同的

 

 

J2se eQuals用法

 

这里比较的是引用的内容,所以是不同的。

 

那么我们比较的是什么呢,比较两个对象的内容是否相同.

 

如何比较: 

对象都不能为空

互等对称的

自反的。


提供的方法的实现。我们需要去重写父类的方法,去掉默认的比较。自己重新实现

 Public boolean equals(Object obj){

 

}


看实现

public class equal{
 public static void main(String[] args){
   catc1=new cat(1,2,4);
   catc3=new cat(1,2,4);
   System.out.println(c1.equals(c3));
}
}
 class cat{
   intcolor;
    intheight,weight;
 
public cat (int color,int height,int weight){
  this.color=color;
  this.height=height;
  this.weight=weight;
}
 
public boolean equals(Object obj){
  if(obj==null)return false;
  else{
      //判断哪类的
      if(objinstanceof cat){
      //强制转换
   cat c=(cat)obj;
       if(c.color==this.color&& c.height==this.height && c.weight==this.weight){
  return true;
       }        
    }                
 }
 returnfalse;
}
 }

测试结果

J2se eQuals用法

 

通过三番测试我们发现,我们看到的并不是我们看到的。对象的equals,指的是对象的内容是否相同。需要我们去重写equals对象的比较方法才能更好的比较对象是否一致。

J2se eQuals用法

上一篇:使用FreeMarker生成Word出错的一点心得


下一篇:UML之用例图