字符串对象的哈希码

时间:2012-05-16 08:57:59

标签: java

您好我是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());
                    }
        }

5 个答案:

答案 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

的内容
相关问题