java中==和eqauls()的区别,equals()和`hashcode的区别

==是运算符,用于比较两个变量是否相等,而equals是Object类的方法,用于比较两个对象是否相等。默认Object类的equals方法是比较两个对象的地址,此时和==的结果一样。换句话说:基本类型比较用==,比较的是他们的值。默认下,对象用==比较时,比较的是内存地址,如果需要比较对象内容,需要重写equal方法。

equals()和hashcode()的联系
hashCode()是Object类的一个方法,返回一个哈希值。如果两个对象根据equal()方法比较相等,那么调用这两个对象中任意一个对象的hashCode()方法必须产生相同的哈希值。
如果两个对象根据eqaul()方法比较不相等,那么产生的哈希值不一定相等(碰撞的情况下还是会相等的。)

a.hashCode()有什么用?与a.equals(b)有什么关系
hashCode() 方法是相应对象整型的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。它与 equals() 方法关系特别紧密。根据 Java 规范,使用 equal() 方法来判断两个相等的对象,必须具有相同的 hashcode。

将对象放入到集合中时,首先判断要放入对象的hashcode是否已经在集合中存在,不存在则直接放入集合。如果hashcode相等,然后通过equal()方法判断要放入对象与集合中的任意对象是否相等:如果equal()判断不相等,直接将该元素放入集合中,否则不放入。

package StringTest;

class Dog{
	
}
public class EqualTest {
       public static void main(String[] args) {
		int a = 0;  // 基本数据类型可以使用==,不能使用equals函数
  		Integer a1 = new Integer(0);  // 基本数据类型的包装类可以使用==和equals函数
  		int b = 0;
  		Integer b1 = new Integer(0);
  		System.out.println(a == b); // true,基本数据类型不用创建新对象,指向常量池
  		System.out.println(a1 == b1); // false
  		System.out.println(a1.equals(b1));// true,包装类equals方法比较内部的值
  		Dog dog1 = new Dog();
  		Dog dog2 = new Dog();
  		System.out.println(dog1 == dog2);//false,比较两个对象,两个对象的首地址不同
  		System.out.println(dog1.equals(dog2));//false,未重写equals方法,比较两个对象,两个对象首地址不同
  		Dog dog3 = dog1;
  		System.out.println(dog1 == dog3);//true,同一对象
  		System.out.println(dog1.equals(dog3));//true,同一对象
	}     
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值