String、StringBuilder和StringBuffer的区别和用法

分别使用使用这三种来拼接字符串,对比各自损耗的时间:
经过测试:

package com.test;

public class Main{

    public static void main(String[] args){
        testString();
        testStringBuffer();
        testStringBuilder();
    }
    private static void testStringBuilder() {
        long begin = System.currentTimeMillis();
        StringBuilder str = new StringBuilder("");
        for (int i = 0; i < 30000; i++) {
            str.append(i);
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("-------------StringBuilder性能快--------------");
        System.out.println(time);
    }
    private static void testStringBuffer() {
        long begin = System.currentTimeMillis();
        StringBuffer str = new StringBuffer("");
        for (int i = 0; i < 30000; i++) {
            str.append(i);
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("------------StringBuffer安全的---------------");
        System.out.println(time);
    }
    //String 做做字符串拼接的时候,性能极低,每次拼接的时候对象改变
    public static void testString(){
        long begin = System.currentTimeMillis();
        String str = "";
/*      for (int i = 0; i < 30000; i++) {
            str += i;
        }*/
        for(Integer i =0; i< 30000; i++){
            str += i.toString();
        }
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println("-----------String----------------");
        System.out.println(time);
    }
}

结论:以后拼接字符串,统统使用StringBuffer/StringBuilder,不要使用String。

String和StringBuilder以及StringBuffer的区别:
StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的。

唯一的区别(建议使用StringBuilder):
StringBuffer:StringBuffer中的方法都使用synchronized修饰符,表示同步的在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低。
StringBuilder:StringBuilder没有使用synchronized修饰符,不安全,但性能高。
StringBuilder sb = new StringBuilder ()等价于…new StringBuilder(16)(API可见..) 使用StringBUilder无参数的构造器,在底层创建一个长度为16的char数组:
char[] value = new char[16];
此时该数组只能存储16字符,如果超过了,得自动扩容:
自动扩容(创建长度更大得数组,再把之前得数组拷贝到新数组)
此时性能极低,一般得,我们事先知道大概需要存储多少字符,在构造器中就应该设置。

原文地址:https://www.cnblogs.com/treasure716/p/10019533.html

时间: 2024-10-10 15:56:00

String、StringBuilder和StringBuffer的区别和用法的相关文章

String, StringBuilder 与StringBuffer的区别与联系

1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBuffer构建的对象可以随时在修改其内容,而无需生成新的对象.一般新建一个对象是会生成16个字节的空间,之后根据需要再增加空间. 由于一般新构建一个对象涉及分配内存空间分配.无引用对象过多时的垃圾回收等,因此,对于操作频繁的字符串需使用StringBuilder或StringBuffer. (2)St

String, StringBuilder及StringBuffer的区别

在java中,String, StringBuilder及StringBuffer经常被用来处理字符串操作. 下表列出它们的异同点: String StringBuffer StringBuilder 是否可继承 否(final) 否(final) 否(final) 是否长度可变 否 是 是 是否线程安全 ---------- 是 否 拼接效率 低 中 高 一般情况下,使用String,StringBuilder比较多.因为字符串的拼接很少会涉及到多线程,所以StringBuffer用的较少.先

String和StringBuilder、StringBuffer的区别

String和StringBuilder.StringBuffer的区别?     Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串.其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的.而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改.StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线

CharSequence,String ,Stringbuilder和StringBuffer源码分析

1.从类的定义看CharSequence.StringBuffer.StringBuilder.String的关系 下面先贴上这四者的定义(来自JDK1.6) CharSequence是一个定义字符串操作的接口,StringBuffer.StringBuilder.String中都实现了这个接口. //CharSequence定义 public interface CharSequence //StringBuffer定义 public final class StringBuffer exte

Java String,StringBuilder和StringBuffer的区别 StringBuilder &gt; StringBuffer&gt; String

可以证明,字符串操作是计算机程序设计中最常见的行为. String:不可变的对象,对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原String对象GC回收.StringBuffer 字符串变量(线程安全),适用于多线程程序中,保证同步性.StringBuilder 字符串变量(非线程安全),适用于单线程程序中,不保证同步性.简要的说, String 类和 StringBuffer/StringBuilder 类的主要性能区别其实在

Java 中的String、StringBuilder与StringBuffer的区别联系(转载)

1 String 基础 想要了解一个类,最好的办法就是看这个类的源代码,String类源代码如下: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for t

Java中String、StringBuilder和StringBuffer的区别

---恢复内容开始--- String字符串常量 StringBuffer字符串变量(线程安全) StringBuilder字符串变量(非线程安全) String是常量,该对象的值已经被赋予了,不能再更改.若非要更改,则只能再重新创建另一个对象,在这个新创建的对象上再进行赋值. StringBuffer是变量,是可以随时变化的量.如果对StringBuffer对象进行改变,每次结果都会对StringBuffer对象进行操作,而不是生成新的对象.所以一般字符串要经常变化的话推荐使用StringBu

String,StringBuilder,StringBuffer的区别

1.速度 运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的. 以下面一段代码为例:String str="abc"; System.out.println(str); str=str+"

StringBuilder与StringBuffer的区别(转)

相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.String类是不可变类,任何对String的改变都会引发新的String对象的生成:而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象,可变和不可变类这一对对象已经齐全了,那么为什么还要引入新的StringBuilder类干吗?相信大家都有此疑问,我也如此.下面,我们