String new()对象的Hashcode显示相同的值

时间:2014-11-23 02:35:06

标签: 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());      
    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

我的问题:

  1. 即使s2,s3,s4和s5的哈希码相同,可以说它们是不同的String对象。 因为,我们使用new()来创建s2-s5对象,说s2,s3,s4和s5是不同的对象并且它们不在字符串池中共享它们的字符串值(加拿大)是正确的吗?

  2. s2-s5的哈希码值相同。它是纯粹的共同发病率吗?

  3. 请解释。

1 个答案:

答案 0 :(得分:0)

这是正常的。散列是基于始终具有相同输出的输入的算法。它绝不是随机发电机。如果您希望它们不同,则字符串值应该是唯一的。您还可以向哈希添加类似ID的值,以便s2将是加拿大,但是当您对其进行哈希处理时,您会对加拿大-s2进行哈希处理。这是一个独特的字符串,所以你会得到一个独特的输出。