<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_746140" class="syntaxhighlighter java">
<table border="0" cellspacing="0" cellpadding="0"> |
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1
<div class="line number2 index1 alt1">2
<div class="line number3 index2 alt2">3
<div class="line number4 index3 alt1">4
<div class="line number5 index4 alt2">5
<div class="line number6 index5 alt1">6
<div class="line number7 index6 alt2">7
<div class="line number8 index7 alt1">8
<div class="line number9 index8 alt2">9
<div class="line number10 index9 alt1">10
<div class="line number11 index10 alt2">11
<div class="line number12 index11 alt1">12
<div class="line number13 index12 alt2">13
<div class="line number14 index13 alt1">14
<div class="line number15 index14 alt2">15
<div class="line number16 index15 alt1">16
<div class="line number17 index16 alt2">17
<div class="line number18 index17 alt1">18
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="java keyword">public?<code class="java keyword">static?<code class="java keyword">void?<code class="java plain">main(String[] args) {
list1 =?
?();
?
list2 =?
?();
?
输出功效:true
上面的要领,做的工作就是,较量两个荟萃中的,实体类工具属性值,是否同等
OrderSum 不在较量范畴内,由于没有重写它的,equals()和hashCode()要领
为什么要重载equal要领?
由于Object的equal要领默认是两个工具的引用的较量,意思就是指向统一内存,地点则相称,不然不相称;假如你此刻必要操作工具内里的值来判定是否相称,则重载equal要领。
一样平常的处所不必要重载hashCode,只有当类必要放在HashTable、HashMap、HashSet等等hash布局的集适时才会重载hashCode,那么为什么要重载hashCode呢?
假如你重写了equals,好比说是基于工具的内容实现的,而保存hashCode的实现稳固,那么很也许某两个工具显着是“相称”,而hashCode却纷歧样。
这样,当你用个中的一个作为键生涯到hashMap、hasoTable或hashSet中,再以“相称的”找另一个作为键值去查找他们的时辰,则基础找不到。
为什么equals()相称,hashCode就必然要相称,而hashCode相称,却不要求equals相称?
1、由于是凭证hashCode来会见小内存块,以是hashCode必需相称。 2、HashMap获取一个工具是较量key的hashCode相称和equal为true。
之以是hashCode相称,却可以equal不等,就好比ObjectA和ObjectB他们都有属性name,那么hashCode都以name计较,以是hashCode一样,可是两个工具属于差异范例,以是equal为false。
为什么必要hashCode?
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!