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