Programcreek -Java基础之String---用""还是用new String("")

Java里可以用两种方法来创建一个String:

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

这两种方法有什么不同?

1. 双引号 Vs. 构造函数

用两个简单的代码来回答这个问题。

Example 1:

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

在JVM 方法区,a和b指向同一个String字面量,内存引用是相同的,所以a==b。

当创建多个相同的String字面量时,只有一个相同的String字面量被保存下来。这称为字符串的驻留(string interning)。Java 中所有常量String都会自动被驻留。

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

JVM堆heap中c和d指向两个不同的对象,所以c==d值为假。不同的对象有不同的内存引用。

下图演示了这两种情景:

2. 运行期字符串驻留String Interning

即使两个String是用构造函数(new String(""))构建,在运行期也会执行字符串驻留。

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



3. 如何使用

如果仅仅需要创建一个字符串,你需要使用双引号方式创建字符串。如果你需要在堆里新创建一个字符串对象时,可以考虑使用构造函数方式创建字符串。这里有个构造函数用例参考。

原文:http://www.programcreek.com/2014/03/create-java-string-by-double-quotes-vs-by-constructor/

字符串驻留参考:

http://blog.csdn.net/biaobiaoqi/article/details/6892352

http://java-performance.info/string-intern-in-java-6-7-8/

转载于:https://my.oschina.net/cnyang/blog/388976

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值