黑马程序员技术交流社区

标题: 使用双引号还是构造函数创建Java字符串? [打印本页]

作者: 焚雨成灰    时间: 2014-3-16 21:10
标题: 使用双引号还是构造函数创建Java字符串?
Java中,可以通过两种方法创建字符串:

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

使用双引号和构造函数创建字符串有何不同?
这个问题可以通过以下例子来回答:
String a = "abcd";
String b = "abcd";
System.out.println(a == b);  // True
System.out.println(a.equals(b)); // True

a==b是真,因为a和b在方法区都是指的同一个字符串常量。内存的引用是相同的。

当相同的字符串被创建多次,JVM只为每个不同的字符串值存储一个副本。这就是所谓的“String interning”。

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是假,因为c和d在堆中引用了不同的对象,不同的对象往往是有不同的内存引用。


何时使用哪一个?

因为常量“abcd”已经是String类型,使用构造函数将创建一个额外的不必要的对象。因此,如果你只需要创建一个String,那就使用双引号。
如果您确实需要在堆中创建一个新的对象时,应该使用构造函数。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2