【问题标题】:What is the difference between implicit and explicit String declaration in java? [duplicate]java中隐式和显式String声明有什么区别? [复制]
【发布时间】:2015-11-26 05:30:47
【问题描述】:
例如..
String herName = new String("clark");
和
字符串 hisName = "michal";
1) 第一段代码确实如此,它将创建新字符串
堆内存中的对象与引用。
2) 第二行代码,它是一个字符串字面量,它创建
字符串常量池中的字符串对象,实际上不在堆内存中。
Then what's the benefit, ?
【问题讨论】:
标签:
java
string
heap-memory
implicit
explicit
【解决方案1】:
好处是new String(String s) 是字符串的复制构造函数,可以按预期工作,提供给定字符串的副本。
调用new String("literally") 并不是为文字设计的特殊功能。事实上,相反的情况是最不寻常的,如果 new String(String s) 在使用字面量时没有按预期工作会有什么好处?
最后,新对象完全在堆上的概念可能会产生误导,您确实有一个新对象,但由于 String 是不可变的,因此它由相同的 char[] value 安全地支持,即使在 Java 8 源代码中引用也是只是传递:
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
【解决方案2】:
第二种情况容易受到称为 interning 的影响 - 如果另一个字符串被初始化为相同的值,则将使用相同的对象。