关于String中的 == 与 hashCode()

首先看一段程序:

关于String中的 == 与 hashCode()_第1张图片
image.png

abdc四个字符串的hashcode都相等:是因为String重写了object的hashcode方法:

关于String中的 == 与 hashCode()_第2张图片
image.png

由重写的方法可知,String的hashcode只和value值相关,和内存地址无关。

当比较abdc四个字符串的地址时:

  1. 第一个true,是因为a和b是指向同一个变量,这个变量在变量池中。
  2. 第二个false,是因为b指向变量池中的一个变量,而c指向堆栈中变量,所以地址不同。
  3. 第三个false,通过c和d是分别指向堆栈中两个不同的对象,所以地址不同。
  4. 第四个false,原理同第二个false。

你可能感兴趣的:(关于String中的 == 与 hashCode())