JAVA中String的纵向分析深入
来源:互联网 发布:软件开发行业趋势 编辑:程序博客网 时间:2024/05/01 12:31
String s = "123";s+="abc";System.out.println(s);
看以上代码
学JAVA的都知道String是不可变的,一旦初始化了,就不可以变化了,可变的应该是StringBuffer类型
那么以上代码怎么解释呢?
DEBUG你会发现第一句和第二句的s不是同一个s,这样的话,就可以解释了
虽然s变了,但是前后已经不是同一个对象s了。
这里的连接是编译器自动调用了StringBuffer类,因为它认为它更高效
JAVA编程思想一书中也有解释:P-283(中)P-503(English)...实际上都创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动...
来个性能比较
int len = 10000;StringBuffer sb = new StringBuffer();long begin1 = System.currentTimeMillis();for(int i=0;i<len;i++) {sb.append(i);}long end1 = System.currentTimeMillis();System.out.println(end1-begin1);String str = "";long begin2 = System.currentTimeMillis();for(int i=0;i<len;i++) {str+=i;}long end2 = System.currentTimeMillis();System.out.println(end2-begin2);9
174
不用我说了,StringBuffer性能的确好很多,毕竟用了Buffer机制
扩展
java5引入了StringBuilder,由于StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuffer开销会更大,理所当然StringBuilder会更快
int len = 10000000;StringBuffer sb = new StringBuffer();long begin1 = System.currentTimeMillis();for(int i=0;i<len;i++) {sb.append(i);}long end1 = System.currentTimeMillis();System.out.println(end1-begin1);StringBuilder str = new StringBuilder();long begin2 = System.currentTimeMillis();for(int i=0;i<len;i++) {str.append(i);}long end2 = System.currentTimeMillis();System.out.println(end2-begin2);487
340
当然差距不是很明显
- JAVA中String的纵向分析深入
- Java中String创建原理深入分析
- JAVA中String的深入研究
- java中特殊的String类型(深入)
- 深入Java中String类
- Java中String的hash函数分析
- Java中String的hash函数分析
- java中String的内存分析
- Java中String的hash函数分析
- Java中关于String的简单而又深入的问题!
- 深入分析Java String.intern()方法
- Java String之intern()方法深入分析
- 【Java基础提高】深入分析String(四)
- java中String、StringBuffer及StringBuilder的深入了解
- Java中String类的intern()方法深入理解。
- 深入java String JVM对String对象的连接优化 一(源码分析)
- 深入了解Java的String
- 深入了解Java的String
- HTML-Meta标签使用
- 求T的N次方
- QX项目实战-6.数据库的建立
- [转]黄智生博士谈语义网与Web 3.0
- 怎么祭奠,不堪一击的爱情:伤感日志
- JAVA中String的纵向分析深入
- Pdf995.pdfEdit995.v11.6.Incl.Keymaker-CORE
- poj1789
- C++入门进阶之4: C++程序结构
- Pdf995.Printer.Driver.v11.6.Incl.Keymaker-CORE
- LDTM项目: 页面载入 + 页面点提交按钮 两种方式的编程思路
- ubuntu Suspend 和 Hibernate 区别
- OmniFormat.v11.2.Incl.Keymaker-CORE
- 正则表达式实例