使用双引号还是构造函数创建Java字符串?

原文:Create Java String Using ” ” or Constructor?

在Java中,创建字符串有两种方式:

String x = "abc";
String y = new String("abc");

双引号与构造函数创建字符串,有什么区别?

双引号 vs 构造函数

这个问题可以用两个简单的例子来解答。

Example 1:

String a = "abcd";
String b = "abcd";
System.out.println(a == b);  // True
System.out.println(a.equals(b)); // True

a==b 为true,是因为a和b都引用了方法区内的同一个字符串字面量。内存引用是相同的。

当相同的字符串字面量被创建多次时,只会储存一个字符串副本。这个被称为‘字符串驻留’。

Example 2:

String c = new String("abcd");
String d = new String("abcd");
System.out.println(c == d);  // False
System.out.println(c.equals(d)); // True

c==d为false,因为c和d指向堆中的不同对象。不同对象总是有不同的内存引用。

图说明了上述两种情况:

constructor-vs-double-quotes-Java-String-New-Page-650x324.png

运行时字符串驻留

即使两个字符串是用构造函数构造的,字符串驻留仍然会在运行时完成:

String c = new String("abcd").intern();
String d = new String("abcd").intern();
System.out.println(c == d);  // Now true
System.out.println(c.equals(d)); // True

注: intern()方法,为每个唯一的字符序列生成一个且仅生成一个String引用。

3.何时使用哪个?

因为字面量‘abcd’已经是String类型,因此使用构造函数会创建一个额外的不必要的对象。因此,如果你仅仅是需要创建一个字符串,双引号应该被使用。

如果你需要在堆中创建一个对象,构造函数应该被使用。这里有个用例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在Java中,一个字符串可以使用下面这两种方式进行创建: 这两种创建字符串的方式有什么不同呢? 双引号 VS 构造...
    craneyuan阅读 605评论 0 3
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,475评论 0 21
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,488评论 0 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,657评论 0 4
  • 本故事纯属虚构: 这些日子,天气变化无常。昨天还是春暖花开,今天就是大雪纷飞。都说下雪的时候不算冷,化雪的时候才算...
    凯里木阅读 673评论 1 1

友情链接更多精彩内容