【问题标题】: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 的影响 - 如果另一个字符串被初始化为相同的值,则将使用相同的对象。

    【讨论】:

    • 这不是“易感”,它会一直被拘留。
    • 好的,它高度易感
    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 2012-03-13
    • 2010-10-10
    • 2014-05-04
    • 2010-12-09
    • 2016-12-16
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多