我爱编程Java 杂谈

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

2018-04-14  本文已影响0人  打铁大师

原文: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类型,因此使用构造函数会创建一个额外的不必要的对象。因此,如果你仅仅是需要创建一个字符串,双引号应该被使用。

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

上一篇 下一篇

猜你喜欢

热点阅读