扫码关注官方订阅号
拥有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 就是一样的,但是它们的引用是不相等的
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
看书的时候不仔细,弄清楚了;
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 就是一样的,但是它们的引用是不相等的