java中隐式和显式字符串声明的区别是什么?

java中隐式和显式字符串声明的区别是什么?,java,string,heap,implicit,explicit,Java,String,Heap,Implicit,Explicit,例如 字符串herName=新字符串(“克拉克”) 及 字符串hisName=“michal” 1) 第一段代码正好如此,它将创建新字符串 对象在堆内存中的引用 2) 第二行代码,它是一个字符串文字,用于创建 字符串常量池中的字符串对象,实际上不在堆内存中 那么它的好处是什么?第二种情况很容易受到所谓的interning的影响-如果另一个字符串被初始化为相同的值,相同的对象将用于该值。好处是新字符串(字符串s)是字符串的复制构造函数,并按预期工作,提供给定字符串的副本 调用新字符串(“字面上”)

例如

字符串herName=新字符串(“克拉克”)

字符串hisName=“michal”

1) 第一段代码正好如此,它将创建新字符串 对象在堆内存中的引用

2) 第二行代码,它是一个字符串文字,用于创建 字符串常量池中的字符串对象,实际上不在堆内存中


那么它的好处是什么?
第二种情况很容易受到所谓的interning的影响-如果另一个字符串被初始化为相同的值,相同的对象将用于该值。

好处是
新字符串(字符串s)
是字符串的复制构造函数,并按预期工作,提供给定字符串的副本

调用
新字符串(“字面上”)
并不是为文本设计的特殊功能。事实上,相反的情况最不寻常,如果
新字符串(String s)
在使用文本时没有按预期工作,那又有什么好处呢

最后,新对象完全在堆上的概念可能会产生误导,您确实有一个新对象,但由于字符串是不可变的,因此它由相同的
char[]value
安全地支持,即使在Java 8源代码中,引用也只是传递:

public String(String original) {
    this.value = original.value;
    this.hash = original.hash;
}

它不是“易感的”,它总是被拘留的。好吧,它是高度易感的