A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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,那就使用双引号。
如果您确实需要在堆中创建一个新的对象时,应该使用构造函数。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马