“==“和equals的区别以及hashCode()和equals()的联系

区别

==和equals都是判断两个数据是否相等

==

对于基本数据类型来说(byte、short、int、long、float、double、boolean、chard),比较的是值是否相等。例如,int a = 5; int b = 5;,则 a == b 返回 true。

对于引用数据类型来说,比较的是对象的内存地址是否相等(判断两个引用是否都指向了同一个对象)例如,String str1 = “hello”; String str2 = “hello”;,则 str1 == str2 返回 true,因为Java中字符串常量池的优化使得相同字符串常量的引用相同。

equals

equals() 方法用于比较两个对象的内容是否相等,通常用于引用数据类型。而且equals()定义在Object类中,所有Java类都实现了这个方法。但是要注意,如果没有重写equals()方法,那么默认的 equals() 行为与 == 等价,都是比较对象的值是否相等。

hashCode()和equals()的联系

在String类中就重写了equals(),添加了对于hashCode()的定义,因为对于字符串的比较,遍历字符串一个一个比较效率非常低,通过hashCode()可以提高效率。即,先去比较hashCode,如果不一样的话那么它们必然不相同,而如果一样的话,则是由于哈希冲突这样的隐患,所以去逐个遍历字符串的内容,然后进行比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值