equals和hashcode是什么

  介绍

小编给大家分享一下equals和hashcode是什么,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

<强> equals和hashcode总结:

=方法没有重写的话,用于判断对象的内存地址引用是否是用一个地址。重写之后一般用来比较对象的内容是否相等(比如学生对象,里面有姓名和年龄,我们重写=方法来判断只要姓名和年龄相同就认为是用一个学生)。

hashcode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值,当然你也可以重写它,hashcode方法只有在集合中用到。

对象放入集合中时,先判断hashcode是否相等,再判断=是否相等,都相等就算是同一个对象,则列表可以放入,因设置为不允许重复所以不会放入。

例如:

公开课学生{   私人int年龄;   私人字符串名称;   公开学生(int年龄、字符串名称){   这一点。年龄=年龄;   this.name=名称;   }   公共int getAge () {   返回年龄;   }   公共空间setAge (int年龄){   这一点。年龄=年龄;   }   公共字符串getName () {   返回名称;   }   公共空间setName(字符串名称){   this.name=名称;   }//重写=方法,判断姓名和年龄相同就是相等的   公共布尔=(对象o) {   如果(o==null) {   返回错误;   }   如果(this.getClass () !=o.getClass ()) {   返回错误;   }   学生学生=(学生)o;   如果(name==null) {   返回错误;   }   如果(年龄==student.getAge(),和name.equals (student.getName ())) {   返回true;   }   返回错误;   }   公共静态void main (String [] args) {   学生studentOne=新学生(1,“yjc");   学生studentTwo=新学生(1,新的字符串(“yjc"));   System.out.println (studentOne.equals (studentTwo));   System.out.println (“1:“+ studentOne.getName () .hashCode ());   System.out.println (“2:“+ studentTwo.getName () .hashCode ());   }//输出结果:没错   1:119666   2:119666   }

以上可以看的出,两个字符串都叫“yjc",无论是直接“yjc"还是新的字符串(“yjc"),他们的hashcode都相同,所以在重写hashcode方法时可以运用这一点。

比如你希望如果姓名和年龄相同,不仅等于相同,他们的hashcode也要相同,可以这样重写hashcode:

公共int hashcode () {   最后一个int '=31;   int结果=1;   结果=' *结果+年龄;   结果=' *结果+ (name==零?0:name.hashcode ());   返回结果;//直接写年龄+ (name==零?0:name.hashcode())也行就是感觉太简单0.0了   }

这样一来两个姓名和年龄相同的学生对象就是同一个对象了,放入组中会被认为是同一个,无论放几个这样的对象,set.size()都是等于1 .

同样,HashMap因也为关键是唯一的,HashMap对象是根据其关键的hashCode来定位存储位置,并使用=(关键)获取对应的价值,所以在放置时判断键是否重复用到了hashCode和等于,若重复了则会覆盖。

看完了这篇文章,相信你对equals和hashCode是什么有了一定的了解,想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

equals和hashcode是什么