Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 显示相同值的字符串new()对象的哈希代码_String_Pooling - Fatal编程技术网

String 显示相同值的字符串new()对象的哈希代码

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

在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());      
    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的文档。