【问题标题】:String's hascode value can be changed? [duplicate]字符串哈希码值可以改变吗? [复制]
【发布时间】:2019-03-19 06:47:48
【问题描述】:

我需要帮助来理解 String 类,我编写了一个程序,其中我创建了一个带有 new 关键字的字符串和另一个带有文字的字符串,下面是程序。在这里,我的困惑是为什么 string s (字面意思)被改变了,因为 string 是不可变的,所以只有值必须改变为什么 hashcode 被改变了。是不是因为 intern() 方法,请帮助我理解这一点。

    String s = "xyz";
 String s1 = new String("abc"); 
System.out.println(s.hashCode()+"--> hashcode before literal string"); 

System.out.println(s1.hashCode()+"--> hashcode before new keyword string"); 

System.out.println(s+"--> before case S value "); 
s = s1; 
System.out.println(s+ "--> after case S value"); 

System.out.println(s.hashCode()+"--> hashcode after literal string"); 

System.out.println(s1.hashCode()+"--> hashcode after new keyword string");

这个的输出是

119193--> 哈希码,在字符串之前

96354--> 哈希码,在新关键字字符串之前

xyz--> case S 值之前

abc--> case S 值之后

96354--> 哈希码,在字符串之后

96354--> 哈希码,在新关键字字符串之后

【问题讨论】:

  • 请详细说明,我正在寻找 s = s1 的输出是 s1 值,这个没问题,哈希码是 s1,这是怎么回事?
  • java 只有原始变量或引用变量。你的String s 是一个引用,它可以在不同的时间指向不同的对象,但它指向的对象也是不可变的。

标签: java string hashcode


【解决方案1】:

String 对象的值是不可变的,并且始终会生成相同的哈希码。

在您的问题中,s 不是一个具有两个不同哈希码的对象:它是您设置为两个不同对象的变量。

【讨论】:

    猜你喜欢
    • 2013-09-15
    • 2011-12-02
    • 2018-07-16
    • 1970-01-01
    • 2012-08-23
    • 2020-04-01
    • 1970-01-01
    • 2023-03-15
    • 2017-12-15
    相关资源
    最近更新 更多