Java中String直接赋值得到两个不一样的字符串它们的哈希值是否相等为什么
Java中String是不可变对象,当使用直接赋值方式创建字符串时,如果字符串常量池中已经存在该字符串,则直接返回该字符串的引用,否则会创建一个新的字符串对象并放入字符串常量池中。
因此,如果使用直接赋值方式创建两个相同的字符串,它们实际上是指向同一个字符串对象的引用,它们的哈希值也是相同的。但是,如果使用直接赋值方式创建两个不同的字符串,它们实际上是指向两个不同的字符串对象的引用,它们的哈希值也是不同的。
例如:
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
System.out.println(s1.hashCode()); // 96354
System.out.println(s2.hashCode()); // 96354
System.out.println(s3.hashCode()); // 96354
在这个例子中,s1和s2都指向字符串常量池中的同一个字符串对象,它们的哈希值相同;而s3指向一个新的字符串对象,它的哈希值也和s1、s2相同,但是它们的引用不同
原文地址: https://www.cveoy.top/t/topic/cEok 著作权归作者所有。请勿转载和采集!