84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
看书的时候不仔细,弄清楚了;String 重写了 hashCode 方法,其 hashCode 值是由内容决定的,而不是地址决定的
String
hashCode
在java中判断String 使用 == 是判断两个对象的地址而不是hashCode。因为你这是两个 String 对象 ,因为你这两个都是使用new 的,所以使用 == 是 false。
hashCode 和 == 是不一样的。 ==比较的是内存地址, 而hashCode是根据实例变量计算出来的。
你使用了new创建了两个String实例(new 关键字是会开辟新内存空间的),而不是直接引用string池中的“hello”,下面是此构造器的源代码。
public String(String original) { this.value = original.value; this.hash = original.hash; }
而String的hash计算方法是根据上述代码中的value和hash。
==比较的是内存地址,hash和equals差不多都是从字符串的每个char得来的,每个char一样,hash一样,但是内存地址不一样
==判断的是两个引用变量是否指向同一个对象。当两个对象的内容一样,它们的hashcode 就是一样的,但是它们的引用是不相等的
看书的时候不仔细,弄清楚了;
String
重写了hashCode
方法,其hashCode
值是由内容决定的,而不是地址决定的在java中判断String 使用 == 是判断两个对象的地址而不是hashCode。因为你这是两个 String 对象 ,因为你这两个都是使用new 的,所以使用 == 是 false。
hashCode 和 == 是不一样的。 ==比较的是内存地址, 而hashCode是根据实例变量计算出来的。
你使用了new创建了两个String实例(new 关键字是会开辟新内存空间的),而不是直接引用string池中的“hello”,下面是此构造器的源代码。
而String的hash计算方法是根据上述代码中的value和hash。
==比较的是内存地址,hash和equals差不多都是从字符串的每个char得来的,每个char一样,hash一样,但是内存地址不一样
==判断的是两个引用变量是否指向同一个对象。当两个对象的内容一样,它们的hashcode 就是一样的,但是它们的引用是不相等的