【发布时间】: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是一个引用,它可以在不同的时间指向不同的对象,但它指向的对象也是不可变的。