您好我是java编程的新手,我想创建多个字符串,因为编写了代码.This.why会为两个字符串对象生成相同的哈希代码。
class SingletonClass {
public static String mystring="this";
}
public class SingletonObjectDemo {
public static void main(String args[]) {
String str = SingletonClass.mystring;
String str2 = SingletonClass.mystring;
System.out.println("String str "+str.hashCode());
System.out.println("String str1 "+str2.hashCode());
}
}
答案 0 :(得分:2)
它为两个字符串对象生成相同的哈希码...因为它们是同一个对象。
答案 1 :(得分:1)
他们在内存中引用相同的对象,实质上没有区别。
答案 2 :(得分:0)
你说你“想要创建多个字符串”但你正在使用一个名为SingletonObjectDemo的东西。单例的意思是只有一个对象,无论你“创建它”多少次,所以你不能创建多个对象。正如路易斯解释的那样,这就是哈希码返回相同的原因。
答案 3 :(得分:0)
您似乎在混淆对象并引用它们。当您编写String str = "a", str2 = "a";
时,您没有创建两个字符串,而是将两个包含完全相同引用的变量声明为字符串常量“a”。
此外,如果它们是两个对象,如String str = new String("a"), str2 = new String("a")
那么hashCode
s 仍然是相同的,因为对于相同的对象,它们的哈希码必须匹配 - 这就是哈希码的基本原则。
但是,如果你写了Object o = new Object(), o2 = new Object()
,现在哈希码是不同的,因为没有Object
的两个实例是相等的(根据定义,而不是某些不可避免的逻辑)。
答案 4 :(得分:0)
这是一个好的哈希码的属性。
如果A和B是A.equals(B)之类的对象,那么下面的属性应该成立。
A.hashCode()。等于(B.hashCode())
您可以阅读有关hashCode和equals()here
的内容