String 和StringBuffer和StringBuilder
来源:互联网 发布:南方电网面试 知乎 编辑:程序博客网 时间:2024/05/16 14:32
1. 值类型来看
String 常量。是一个对象不是原始类型,一旦值被创建就不可以改变,一旦值发生变化那么就是重新创健了一个新的对象,把值存放进去
Stringbuffer和StringBuilder是变量。Stringbuffer是一个变量,对值的修改不能像String那样通过赋值符号修改而是通过他的append函数,一旦创健就会在内容中分配一块空间并默认是null,字符串连接操作中StringBuffer的效率要比String高
2.性能来看
String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
3.存储来看
Stringbuffer 有append()方法
Stringbuffer其实是动态字符串数组
append()是往动态字符串数组添加,跟“xxxx”+“yyyy”相当那个‘+’号
跟String不同的是Stringbuffer是放一起的
String1+String2 和Stringbuffer1.append("yyyy")虽然打印效果一样,但在内存中表示却不一样
String1+String2 存在于不同的两个地址内存
Stringbuffer1.append(Stringbuffer2)放再一起,地址相同。
4.来自http://www.cnblogs.com/rpp506815950/archive/2012/11/07/2758646.html
看看以下代码:
将26个英文字母重复加了5000次,
- String tempstr = "abcdefghijklmnopqrstuvwxyz";
- int times = 5000;
- long lstart1 = System.currentTimeMillis();
- String str = "";
- for (int i = 0; i < times; i++) {
- str += tempstr;
- }
- long lend1 = System.currentTimeMillis();
- long time = (lend1 - lstart1);
- System.out.println(time);
得到的结果每次不一定,一般为 1563左右。
我们再看看以下代码
- String tempstr = "abcdefghijklmnopqrstuvwxyz";
- int times = 5000;
- long lstart2 = System.currentTimeMillis();
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < times; i++) {
- sb.append(tempstr);
- }
- long lend2 = System.currentTimeMillis();
- long time2 = (lend2 - lstart2);
- System.out.println(time2);
得到的结果为 16 有时还是 0
4.StringBuilder与 StringBuffer
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结: 1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
- String 、StringBuffer 和 StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String Stringbuffer和StringBuilder
- String ,StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String和StringBuffer,StringBuilder
- String、StringBuffer和StringBuilder
- String, StringBuffer和 StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuilder和StringBuffer
- StringBuilder、StringBuffer和String:
- String、StringBuffer和StringBuilder
- MongoDB数据库设计中6条重要的经验法则
- Andorid中的AIDL(一)
- OpenGL
- 常用的javaScript正则表达式
- 捷联惯性导航技术之卡尔曼滤波
- String 和StringBuffer和StringBuilder
- ES2015中最惊艳特性之生成器函数初步
- Android应用内启动第三方应用
- 创建sysfs节点
- BZOJ2618 (半平面交)
- AWS IoT 常见问题
- 【Paper Note】Convolutional Clustering for Unsupervised Learning 论文翻译
- 设计模式 工厂方法模式 Factory Method
- 同义词+同义词类别+创建同义词+删除同义词+同义词的作用