String 显示相同值的字符串new()对象的哈希代码
在Java中,我做到了这一点:String 显示相同值的字符串new()对象的哈希代码,string,pooling,String,Pooling,在Java中,我做到了这一点: String s1=new String("USA"); String s2 = new String("Canada"); String s3=new String("Canada"); String s4 = new String("Canada"); String s5=new String("Canada"); System.out.println(s1.hashCode()); Sys
String s1=new String("USA");
String s2 = new String("Canada");
String s3=new String("Canada");
String s4 = new String("Canada");
String s5=new String("Canada");
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
System.out.println(s4.hashCode());
System.out.println(s5.hashCode());
Output :
3254818
96801
96801
96801
96801
我的问题是:
即使s2、s3、s4和s5的哈希代码相同,也可以说它们是不同的字符串对象。
因为我们使用new创建s2-s5对象,所以说s2、s3、s4和s5是不同的对象,并且它们在字符串池中不共享其字符串值,这是否正确
s2-s5的哈希代码值相同。这是纯粹的共发病吗
请解释一下。这很正常。散列是一种基于总是具有相同输出的输入的算法。它决不是一个随机发生器。如果希望它们不同,字符串值应该是唯一的。您还可以向散列中添加一个像ID这样的值,这样s2将是Canada,但当您对其进行散列时,您将散列Canada-s2。这是一个唯一的字符串,因此您将得到一个唯一的输出。那么,它是否正确:s2、s3、s4和s5都是不同的对象,具有各自的值:Canada存储在堆的不同位置?是的,更好的测试可能是更改s2的值,然后检查s3的值,您将看到它们是不同的。有关详细信息,请参阅hascode的文档。