String s = new String("Java");
将这个语句创建两个字符串对象。一个存储在堆中,另一个存储在字符串池中。
我搜索了很多,但找不到任何文档。
如果是/否,请给我同样的理由/参考。
String s = new String("Java");
将这个语句创建两个字符串对象。一个存储在堆中,另一个存储在字符串池中。
我搜索了很多,但找不到任何文档。
如果是/否,请给我同样的理由/参考。
让我们谈谈与此相关的一些案例。
String s1 = "java";
String s2 = "java";
String s3 = new String("java");
a) s1 和 s2 只是被引用,而不是对象,它们指向内存中的同一个字符串。
b)“java”是实习的,是一个复合对象:一个 char[] 对象和 String 对象本身。它由内存中的两个对象组成。
c) s3, new String("java") 再产生一个对象。new String("java") 不会复制 "java" 的 char[],它只是在内部引用它。这是方法签名:
public String2(String original) {
this.value = original.value;
this.hash = original.hash;
}