欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

J2se eQuals用法

程序员文章站 2022-05-21 11:18:59
equals是Object类中方法。判定两个对象是否相同。定义为 x.queals(y),当x和y是同一个对象的应用返回true。 否则返回false J2set提供了一些类...

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

否则返回false

J2set提供了一些类,重写了object的queal用法,判断所引用的对象是否为同一个类且属性内容相同时返回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用法

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

vcD4KPHByZSBjbGFzcz0="brush:java;">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对象的比较方法才能更好的比较对象是否一致。