关于java:Java常见面试题-equals-和-的区别是什么

43次阅读

共计 745 个字符,预计需要花费 2 分钟才能阅读完成。

对于 ==
对于根本类型和援用类型 == 的作用成果是不同的,如下所示:
根本类型:比拟的是值是否雷同;
援用类型:比拟的是援用是否雷同;
代码示例:

代码解读:因为 x 和 y 指向的是同一个援用,所以 == 也是 true,而 new String()办法则重写开拓了内存空间,所以 == 后果为 false,而 equals 比拟的始终是值,所以后果都为 true。

对于 equals
equals 实质上就是 ==,只不过 String 和 Integer 等重写了 equals 办法,把它变成了值比拟。看上面的代码就明确了。
首先来看默认状况下 equals 比拟一个有雷同值的对象,代码如下:


最初输入后果为 false,equals 源码如下

原来 equals 实质上就是 ==。
那问题来了,两个雷同值的 String 对象,为什么返回的是 true?代码如下:

当咱们进入 String 的 equals 办法:

原来是 String 重写了 Object 的 equals 办法,把援用比拟改成了值比拟。
总结:== 对于根本类型来说是值比拟,对于援用类型来说是比拟的是援用;而 equals 默认状况下是援用比拟,只是很多类从新了 equals 办法,比方 String、Integer 等把它变成了值比拟,所以个别状况下 equals 比拟的是值是否相等。

那么两个对象的 hashCode()雷同,则 equals()也肯定为 true,对吗?

不对,两个对象的 hashCode()雷同,equals()不肯定 true。
比方

执行的后果:

代码解读:很显然“通话”和“重地”的 hashCode() 雷同,然而 equals() 则为 false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

最初

我整顿了一份 Java 零碎学习材料,如有须要请扫描下方二维码支付

正文完
 0