String、StringBuilder、StringBuffer

http://www.cnblogs.com/dolphin0520/p/3778589.html

附上同行写的博客,写的不错

我学习了,总结如下:

1.查看源码

private final char value[],发现字符串中每一个字符实际上是以数组的形式保存着的
查看concat,replace等很多方法,返回结果都是return new String(xxx),都是重新生成新的字符串对象,而不是在原字符串上操作

记住对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象

2.博主反编译字节码文件,这个不会

String string = "";
for(int i=0;i<10000;i++){
string += "hello";
}
这段代码如果直接执行实际上产生了1000个String对象
但在运行中实际上jvm使用StringBuilder去优化

StringBuilder str = new StringBuilder(string);

str.append("xxx");

str.toString();

首先生成StringBuilder对象,用StringBuilder对象去操作(append),然后将StringBuilder转换为String

这样同样会产生1000个对象

这样有优化效果吗,我测试了一下是能优化的,速度快的时候能提高一倍

3.下面介绍StringBuilder与StringBuffer

上面的操作如果使用StringBuilder:

StringBuilder stringBuilder = new StringBuilder();
for(int i=0;i<10000;i++){
stringBuilder.append("hello");
}

则只会产生一个stringBuilder 对象,也就是说在用stringBuilder 操作时候,不会产生新的对象,这样大大提升了速度
所以,如果字符串的相加操作或者改动操作过多的话,就使用stringBuilder
StringBuffer是干什么的呢?

看源码,发现几乎是一样的,就是在成员方法上多了synchronized,显然就表明它是线程安全的
在多线程环境,使用StringBuffer

 

posted @ 2018-05-08 11:49  0706jaro  阅读(157)  评论(0编辑  收藏  举报