class test
{
public static void main(String[] args)
{
String s1 = new String("JAVA");
String s2 = new String("JAVA");
String s3 = new String("JAVA");
}
}
这里创建了多少个字符串对象以及为什么??
答案 0 :(得分:2)
声明并初始化3个不同的String对象为“JAVA”。
每次调用new String()
时,都会创建一个新的不可变String对象。
答案 1 :(得分:1)
我不知道您是如何打印出每个对象的哈希码,但请尝试以下操作,看看您得到了什么。您应该为每个String对象使用不同的哈希码,因为尽管每个对象都是具有相同值的String,但它们存储在内存中的不同位置。
class test{
public static void main(String[] args)
{
String s1 = new String("JAVA");
String s2 = new String("JAVA");
String s3 = new String("JAVA");
System.out.println(System.identityHashCode(s1));
System.out.println(System.identityHashCode(s2));
System.out.println(System.identityHashCode(s3));
}
}
那应该返回如下结果:
219604438
1514883920
87924608
这就是它在我的系统上的返回方式。你的不一样。
答案 2 :(得分:0)
正在创建三个不同的字符串对象,即使每个字符串对象具有相同的值。 new
运算符创建对象的新实例。如果从内存的角度考虑它,它可能看起来像这样(假设左边的数字是内存中的位置):
String s1: 01
01 J
02 A
03 V
04 A
String s2: 06
06 J
07 A
08 V
09 A
String s3: 11
11 J
12 A
13 V
14 A
因此每个字符串在内存中都有自己的位置,但可以包含相同的值。
答案 3 :(得分:0)
创建3个不同的String实例。 "新"关键字始终创建新对象。虽然它们保持相同的值,但它们被分配到不同的内存地址:)