equals()和hashcode()区别

首先equals()和hashcode()这两个方法都是从object类中继承过来的。
  equals()是对两个对象的地址值进行的比较(即比较引用是否相同)。
  hashCode()是一个本地方法,它的实现是根据本地机器相关的。
  
equals():反映的是对象或变量具体的值,即两个对象里面包含的值–可能是对象的引用,也可能是值类型的值。
hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。

之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。

两个obj,如果equals()相等,hashCode()一定相等。
  两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。
所以:
  可以考虑在集合中,判断两个对象是否相等的规则是:
    第一步,如果hashCode()相等,则查看第二步,否则不相等;//加快比较效率
    第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。

hash相等的equals不一定相等,equals相等的hash一定相等
hash和equals重写方法

public class DD {
	private String name;
	private int age;
	
	
	public DD(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	public DD() {
		super();
		
	}

	
	
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;

	}
	
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		DD other = (DD) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
}

比较DD dd=new DD(“a”,18);
DD dd2=new DD(“B”,19);
hash值都是1616

public class HashCodeEquals {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DD dd=new DD("a",18);
		DD dd2=new DD("B",19);
		if(dd.hashCode()>dd2.hashCode()){
			System.out.println("a大");
		}else if(dd.hashCode()==dd2.hashCode()){
			System.out.println("a=b");
		}else{
			System.out.println("b大");
		}
		if(dd.equals(dd2)){
			System.out.println("a=b");
		}else{
			System.out.println("a不等b");
		}
	}

}

equals是对对象内容的比较,不比较地址
String a=new String(“abc”);
String b=new String(“abc”);
boolean c=a==b返回flase
boolean c=a.equals(b);返回ture

compareTo:这个函数的作用就是对两个字符串按字典排序的方式进行比较,返回两个字符串中第一个不同的字符的ascII码差值
String a=new String(“abcd”);
String b=new String(“abc”);
int c=a.compareTo(b);//不同是d和c所以100-99=1
String a=new String(“abcB”);
String b=new String(“abcb”);
int c=a.compareTo(b);//不同是B和b所以66-98=-32

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值