hashCode()方法与equals()方法的说明

1,一般我们自己用时,只使用equals()方法,用于判断两个对象是否是业务上等价的。
2,在重写equals()方法时,强烈推荐也要重写hashCode()方法,因为有的集合用到了hashCode()来提高效率。
equals为true的对象的hashCode值一定要一样。
equals为false的对象的hashCode值尽量不一样。
3,可以使用工具自动生成hashCode()与euqals()方法。

 1 package com.zsy.study;
 2 
 3 public class User {
 4     private Integer id;
 5     private String name;
 6     public Integer getId() {
 7         return id;
 8     }
 9     public User(){}
10     public User(Integer id) {
11         super();
12         this.id = id;
13     }
14     public void setId(Integer id) {
15         this.id = id;
16     }
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     
24 }

测试代码

 1 public class TestEquals {
 2 
 3     @Test
 4     public void test() throws Exception {
 5         Set<User> set = new HashSet<User>();
 6 
 7         // User user = new User(1);
 8         // set.add(user);
 9         // set.add(user);
10 
11         set.add(new User(1));
12         set.add(new User(1));
13         set.add(new User(1));
14 
15         System.out.println(set.size());
16     }
17 
18     @Test
19     public void test2() throws Exception {
20         System.out.println("aa" == "aa"); // true
21         System.out.println(new String("aa") == new String("aa")); // false
22         System.out.println("aa" == new String("aa")); // false
23 
24         System.out.println("aa".equals(new String("aa"))); // true
25     }
26 
27     @Test
28     public void test3() throws Exception {
29         Set<User> set = new HashSet<User>();
30 
31         User user = new User(); // id = 0
32         set.add(user);
33 
34         // session.save(user); // id = 5
35         user.setId(5);
36         set.add(user); // user.hashCode() == eltOldhashCode;
37 
38         // set.add(user);
39         System.out.println(set.size());
40     }
41 }

需导入junit.jar 测试类

原文地址:https://www.cnblogs.com/oumyye/p/4189634.html