在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的哈希码相同,可以说它们是不同的String对象。 因为,我们使用new()来创建s2-s5对象,说s2,s3,s4和s5是不同的对象并且它们不在字符串池中共享它们的字符串值(加拿大)是正确的吗?
s2-s5的哈希码值相同。它是纯粹的共同发病率吗?
请解释。
答案 0 :(得分:0)
这是正常的。散列是基于始终具有相同输出的输入的算法。它绝不是随机发电机。如果您希望它们不同,则字符串值应该是唯一的。您还可以向哈希添加类似ID的值,以便s2将是加拿大,但是当您对其进行哈希处理时,您会对加拿大-s2进行哈希处理。这是一个独特的字符串,所以你会得到一个独特的输出。