使用" "还是构造函数,来创建字符串?

在Java中,可以使用两种方法来创建字符串: 

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

使用双引号和使用构造函数之间的区别是什么?

 

可以通过使用两个简单的代码示例来回答这个问题。

 

示例1:

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

当不止一次创建同样的字符串字面值时,每个不同的字符串值只有一个副本被保存,这叫做“字符串的驻留”,在Java中所有的编译时不变的字符串自动驻留。

 

示例2:

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

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

 

这张图描述了上面两种情形:

 

2.运行时的字符串驻留

字符串驻留还可以在运行时实现,即使两个字符串是由构造函数创建的:

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

 

3.该使用哪种方式

因为字面值“abcd”已经是String类型,使用构造函数将创建一个额外的不必要的对象。因此,如果你只需要创建一个字符串,应该使用双引号。
如果你需要在堆中创建一个新的对象,应该使用构造函数。这里是一个使用案例。

 

原文出处:http://www.programcreek.com/java-tutorials/
译文出处:http://www.cnblogs.com/hellovenus/

相关文章:

  • 2022-12-23
  • 2021-04-17
  • 2022-02-14
  • 2022-12-23
  • 2021-10-19
  • 2022-01-20
  • 2022-01-10
猜你喜欢
  • 2021-09-13
  • 2022-12-23
  • 2021-12-07
  • 2022-12-23
  • 2021-10-29
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案