Programcreek -Java基础之String---用""还是用new String("")
2015-03-19 14:55
435 查看
Java里可以用两种方法来创建一个String:
这两种方法有什么不同?
1. 双引号 Vs. 构造函数
用两个简单的代码来回答这个问题。
Example 1:
在JVM 方法区,a和b指向同一个String字面量,内存引用是相同的,所以a==b。
当创建多个相同的String字面量时,只有一个相同的String字面量被保存下来。这称为字符串的驻留(string interning)。Java 中所有常量String都会自动被驻留。
Example 2:
JVM堆heap中c和d指向两个不同的对象,所以c==d值为假。不同的对象有不同的内存引用。
下图演示了这两种情景:
2. 运行期字符串驻留String Interning
即使两个String是用构造函数(new String(""))构建,在运行期也会执行字符串驻留。
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/
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/
相关文章推荐
- Java解惑之String的"+"一定差于StringBuilder的append吗?
- Java基础---对String s1="abc"和String s2=new String("abc")的理解
- java String的面试点("abc"与new String("abc")的区别)
- java中写入文件时换行符是用"/r/n"还是"/n"?
- String[] a = new String[]{"1","2"},我如果想增加一个"3"到a中,如何增加?
- 【Java基础一】String创建对象"" && null
- GOF-Java基础知识和J2EE框架知识之间一座隐性的"桥"
- java String 中替换"\"为"\\"
- java中,字符串String类型的""和null值的区别
- "java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils"的解决办法
- 黑马程序员-----java基础01第一个应用程序 "HelloWorld"
- java中int转string该用+""还是String.valueOf
- Java 学习笔记-基础-"=="和equals()的区别。
- JAVA String.split()以"\t"分割字符串的问题
- 【java基础】之String和new String()的区别
- Java基础:创建String对象时,String s=new String("abc")和String s="abc"的区别
- 使用双引号""创建Java字符串还是使用String构造函数?
- Java中的"=="和"equals()"的区别 String中的单例模式
- Java - "==" and "equals" are different method to String Class
- java String 中的特殊符号 "." "|" "*" "\" "]"