第九条: equals和hashCode

  
package cn.stu;

public class Student {

	public String userName;
	public String schoolName;
	
	
	 
	@Override
	public boolean equals(Object obj) {
		 if(obj != null && this != null){
			  Student stu = (Student)obj;
			  if(this.userName.equals(stu.userName) && this.schoolName.equals(stu.schoolName)){
				 
				    return true;
			  }  
			  return false;
		 }
		 return super.equals(obj);
	} 
	 
	
	@Override
	public int hashCode() {
		 
		System.out.println("hashCode---->"+userName.hashCode() + schoolName.hashCode()); 
		
		return userName.hashCode() + schoolName.hashCode();
	}
	
	
	
}

package cn.stu;

import java.util.HashSet;

/**
 * 
*   hashCode 只是一种有利于查找的一个表示记号, 
*   
*   (1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true ,不然集合类就会出现问题。 
    (2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false,
      
    规则比较的多, 感觉只要记住这两种就好。  用途一般都是和集合有关。 
 *
 */
public class Main {
 
    
	public static void main(String[] args) {
		 
       Student stuA = new Student();
       stuA.userName = "小强";
       stuA.schoolName = "三年二班";
	   
	   
	   Student stuB = new Student();
	   stuB.userName = "小强";
	   stuB.schoolName = "三年二班";
	   
	   
	   //  hashCode 相同, 但是对象地址不一样。 这样的话, 相同的val中, 存储了两个。 所以,一般重写了hashcode的时候也一定要
	   //  重写equals方法。 
	   HashSet set = new HashSet();
	   set.add(stuA);
	   set.add(stuB);
	   set.add(stuA);
	   set.add(stuB);
	   
	   System.out.println(set.size());
	   
	   /*
	    * 只是从写hashcode的时候,运行结果如下
	    * 
	    * hashCode---->754955619024812
	      hashCode---->754955619024812
	      hashCode---->754955619024812
	      hashCode---->754955619024812
	      2
	   */

	   
	   /* 
	    * 重写equals方法, 保证对象是同一个对象。 
	    * 
		   hashCode---->754955619024812
		   hashCode---->754955619024812
		   hashCode---->754955619024812
		   hashCode---->754955619024812
		   1
	  */ 
	   
	   String a = "123";
	   String b = new String("123");
	   
	   System.out.println(a == b);//------不同的对象, 
	   System.out.println(a.equals(b));// ---------默认对String的equals方法进行了重写。但是还是不同的对象,只是val相同而已。
	   
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值