StringBuffer与StringBuilder有什么区别

package String比较;
/*
 * StringBuffer与StringBuilder有什么区别
 * StringBuilder是JDK5增加的一个新类,功能几乎与StringBuffer相同。区别在于StringBuffer是线程安全的,
 * 多个线程同时操作StringBuffer时,能保证同步,而Stringbuilder是线程非安全的。如果只在单线程环境下使用,StringBuilder
 * 的效率会更高
 */

public class Test9 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String strtemp = "watch_free";
        int time = 12000;
        @SuppressWarnings("unused")
        String str = "";
        long start1 = System.currentTimeMillis();
        for(int i= 0;i<time;i++){
            str+=strtemp;
        }
        long end1 = System.currentTimeMillis();
        System.out.println("String:"+(end1-start1)+"ms");//1218ms

        StringBuffer sbf = new StringBuffer();
        long start2 = System.currentTimeMillis();
        for(int i = 0;i<time;i++){
            sbf.append(strtemp);
        }
        long end2 = System.currentTimeMillis();
        System.out.println("StringBuffer:"+(end2-start2)+"ms");//2ms

         StringBuilder sbd = new StringBuilder();
         long start3 = System.currentTimeMillis();
         for(int i = 0;i<time;i++){
             sbd.append(strtemp);
         }
         long end3 = System.currentTimeMillis();
         System.out.println("StringBuilder:"+(end3-start3)+"ms");//1ms
    }

}
时间: 2024-10-05 14:15:15

StringBuffer与StringBuilder有什么区别的相关文章

String、StringBuffer、StringBuilder三者的区别

String.StringBuffer.StringBuilder这三个都可以用在字符串处理上面,但它们三究竟有什么区别呢? 先来看看String,String是final类,是不可变的对象,在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值,如果对String赋值N次,就会在内存中为新的对象分配N个新的空间,在内存中保存N个这个对象的副本,浪费系统资源. 比如:String s1 = new String("行者");s1 = s1 + "摩罗";实际上

Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的. private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在Abstra

StringBuffer与StringBuilder原理与区别

其实只要找下Google大神就有答案了:StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的. 为了更好的理解上述的答案,还是直接看StringBuffer与StringBuilder的源码实现比较实在,作为一个程序猿,“有疑问,看源码”才是正道,我可以负责任的说,当然了得有条件才行!

String,StringBuffer,StringBuilder三者的区别

相同点: String,StringBuffer,StringBuilder,都是final类,不允许被继承,在本质上都是字符数组, 不同点: 1.String的长度是不可变的而后两者长度可变,在进行连接操作时,String每次返回一个新的String实例,而StringBuffer和StringBuilder的append方法直接返回this,所以当进行大量的字符串连接操作时,不推荐使用String,因为它会产生大量的中间String对象. 2.StringBuffer和StringBuild

String 、 StringBuffer、StringBuilder三者的区别

1.String类表示内容不可修改的字符串,StringBuffer(线程安全)和StringBuilder(线程不安全)类都表示内容可以被修改的字符串. 2.执行速度:StringBuilder > StringBuffer > String String执行速度最慢原因: String的底层代码为一个用final修饰的char数组,这意味着定义一个String变量后,该变量的内容是不能够改变的. 也就是说,你定义一个String变量后,不断的改变其内容,表面上看起来是改变了内容,因为每次输

浅谈String、StringBuffer和StringBuilder类的区别

1.均可对字符串进行修改,但StringBuffer和StringBuilder类的对象进行多次修改时,不产生新的未使用对象. String 的底层是用final修饰的char数组,变量的内容不可变——内存占用高,资源利用率低: StringBuffer和StringBuilder类 则继承了AbstractStringBuilder类,其未使用final修饰char数组,变量内容动态更新——无效数组等待垃圾回收,减少资源占用; 2.StringBuilder相较于StringBuffer有速度

String、StringBuffer与StringBuilder三者的区别

简单的说: String:创建的是字符串常量,创建的字符串会放入内存的常量池中,是不可变的对象.如果要对String类型的内容进行改变,实际上每次改变都会重新new一个String类型的字符串对象,指针指向的地址已经发生改变.如果要经常改变字符串的内容时,不建议使用String类型的字符串,因为每次创建新的字符串对象都会对系统造成影响. StringBuffer:创建字符串,当要改变内容时是对其本身进行修改,并不会创建新的对象.该方法线程安全. StringBuilder:创建字符串,当要改变内

【Java】String,StringBuffer与StringBuilder的区别??

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以

String,StringBuffer,StringBuilder个人认为较重要的区别

    今天在整理不可变对象知识点时,突然看到了String,StringBuffer,StringBuilder三者的区别,这里就挑一些我认为比较重要的点记录一下,方便日后查看.     String,StringBuffer,StringBuilder,都是final类,不允许被继承,在本质上都是字符数组,不同的是,String的长度是不可变的而后两者长度可变,在进行连接操作时,String每次返回一个新的String实例,而StringBuffer和StringBuilder的append