new String(String str)的源代码如下:
- public String(String original) {
- this.value = original.value;
- this.hash = original.hash;
- }
- public int hashCode() {
- int h = hash;
- if (h == 0 && value.length > 0) {
- char val[] = value;
- for (int i = 0; i < value.length; i++) {
- h = 31 * h + val[i];
- }
- hash = h;
- }
- return h;
- }
复制代码
首先==这个符号是什么意思要明白。当比较的是对象时,而不是进本数据类型时,==号比较的是地址值,而地址值不一定是hashCode值,因为hashCode被复写了就不是了,在Object类中地址值等于hashCode值。
在new对象时,需要在堆内存中分配空间,地址值是唯一的。这个要和“哈希表数据结构”分清楚。
|