1700442332
1700442333
那回到我们的例子上,由于我们没有重写hashCode方法,两个张三对象的hashCode方法返回值(也就是哈希码)肯定是不相同的了,在HashMap的数组中也就找不到对应的Map条目了,于是就返回了false。
1700442334
1700442335
问题清楚了,修改也非常简单,重写一下hashCode方法即可,代码如下:
1700442336
1700442337
class Person{
1700442338
1700442339
/*其他代码相同,不再赘述*/
1700442340
1700442341
@Override
1700442342
1700442343
public int hashCode(){
1700442344
1700442345
return new HashCodeBuilder().append(name).toHashCode();
1700442346
1700442347
}
1700442348
1700442349
}
1700442350
1700442351
其中HashCodeBuilder是org.apache.commons.lang.builder包下的一个哈希码生成工具,使用起来非常方便,诸位可以直接在项目中集成。(为什么不直接写hashCode方法?因为哈希码的生成有很多种算法,自己写麻烦,事儿又多,所以采用拿来主义是最好的方法。)
1700442352
1700442353
1700442354
1700442355
1700442357
编写高质量代码:改善Java程序的151个建议 建议49:推荐覆写toString方法
1700442358
1700442359
为什么要覆写toString方法,这个问题很简单,因为Java提供的默认toString方法不友好,打印出来看不懂,不覆写不行,看这样一段代码:
1700442360
1700442361
public class Client{
1700442362
1700442363
public static void main(String[]args){
1700442364
1700442365
System.out.println(new Person(“张三”));
1700442366
1700442367
}
1700442368
1700442369
}
1700442370
1700442371
class Person{
1700442372
1700442373
private String name;
1700442374
1700442375
public Person(String_name){
1700442376
1700442377
name=_name;
1700442378
1700442379
}
1700442380
1700442381
/*name的getter/setter方法省略*/
[
上一页 ]
[ :1.700442332e+09 ]
[
下一页 ]