「java重写equals」Java重写和重载
今天给各位分享java重写equals的知识,其中也会对Java重写和重载进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java类重写equals里面有字段是空的怎么办?一个一个判断非空吗
- 2、在 com . tjl .demo18/ Student . java 类中为什么重写equals?
- 3、java为什么要重写equals ?!
- 4、如何重写Java中的equals方法
- 5、java关于重写equals的问题
java类重写equals里面有字段是空的怎么办?一个一个判断非空吗
1.引用类型的基类没有重写Equals
2.引用类型的基类重写了Equals
3.值类型重写了Equals if (this == obj) return true; //对象类型是否相同,不同返回false if (obj == null) return false; //对象是否为空,为空返回false if (!(obj instanceof Person)) return false; //对象不是Person类型 Person other = (Person) obj; //定义一个Person对象 if (age != other.age) return false; //age是否等于other.age if (name == null) { //姓名为空,,,,,下面的不解释了,自己应该看得懂了 if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } 这段代码重写equals方法的原因,应该是person对象只有在姓名和年龄都相同时,才返回true,大概是用来判断是不是同一个人的吧
在 com . tjl .demo18/ Student . java 类中为什么重写equals?
equals方法继承自Object类,Object的equals方法是通过判断地址是否相同来判断是否同一对象,也就是是否相等。
在Student类中重写equals方法,是希望通过判断Student的属性,比如学生id之类的键值属性是否相等或者多个组合属性(姓名、班级、年龄等等)是否相等来判断是否同一对象。否则只会判断两个Student是否存储地址相等来判断是否同一对象。
java为什么要重写equals ?!
默认equals在比较两个对象时,是看他们是否指向同一个地址的。\x0d\x0a但有时,我们希望两个对象只要是某些属性相同就认为他们的quals为true。比如:\x0d\x0aStudent s1 = new Student(1,"name1");\x0d\x0aStudent s2 = new Student(1,"name1");\x0d\x0a如果不重写equals的话,他们是不相同的,所以我们要重些equals,判断只要他们的id和名字相同equals就为true,在一些集合里有时也这样用,集合里的contain也是用equals来比较
如何重写Java中的equals方法
//在你的类A中定义一个签名为
//@Override
//public boolean equals(Object obj)的方法就能重写(覆盖)Object类的同名方法了,
//以后调用equals方法比较两个类A的对象的相等性时,就会调用你重写的方法了。
//看例子。
public class Demo
{
public static void main(String[] args)
{
A a1=new A(1,'a'),a2=new A(1,'b'),a3=new A(1,'a');
//调用类A的重写的equals方法比较3个对象的相等性
//false
System.out.println(""+a1.equals(a2));
//true
System.out.println(""+a1.equals(a3));
//false
System.out.println(""+a2.equals(a3));
}
}
class A
{
A(int n,char c)
{
this.n=n;
this.c=c;
}
//@Override可省略
@Override
public boolean equals(Object obj)
{
System.out.println("调用了重写的类A的equals方法。");
boolean r=false;
A a;
if(obj instanceof A)
{
a=(A)obj;
r=(this.n==a.n this.c==a.c);
}
return r;
}
private int n;
private char c;
}
java关于重写equals的问题
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。如下:
(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true
(2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false
如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等。特别指出利用equals比较八大包装对象
(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址
hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。
这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,
当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象,
导致混淆,因此,就也需要重写hashcode()
关于java重写equals和Java重写和重载的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-02,除非注明,否则均为
原创文章,转载请注明出处。