🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # StringBuffer类 StringBuffer类 StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容 StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作 StringBuffer进行字符串拼接的时候只能进行append,而string类是+ 我们查看StringBuffer类源码,发现里面方法基本都加了synchronized ## String和StringBuffer区别 **String类** ~~~ public final class String implements java.io.Serializable, Comparable<String>, CharSequence ~~~ **StringBuffer类** ~~~ public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence ~~~ 发现String与StringBuffer都是CharSequence接口的子类.而在以后开发中,如果是CharSequence接口,那么应该清楚,只需要传递字符串即可 **CharSequence** ~~~ //向上转型 CharSequence s = "Hello"; //String类覆写的toString System.out.println(s); ~~~ 虽然String和StringBuffer类有着共同接口,但是这两个类对象之间,如果要相互转换不能直接转换! **String转换为StringBuffer** 方式一: 利用StringBuffer类的构造方法 ~~~ public StringBuffer(String str); ~~~ 方式二: 利用append()方法 ~~~ public StringBuffer append(String str); ~~~ **StringBuffer转换为String** 利用toString()方法可以将StringBuffer转换为String ~~~ StringBuffer buffer = new StringBuffer("hello"); String str = buffer.toString(); System.out.println(str); ~~~ # StringBuilder类 **在这方面运行速度快慢为:StringBuilder > StringBuffer > String** String为字符串常量,而StringBuilder和StringBuffer均为字符串变量, 即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的 **StringBuilder是线程不安全的,而StringBuffer是线程安全的** **String:适用于少量的字符串操作的情况 StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况** # 方法 * Object: 它是所有类的超类,祖宗类。java中所有的类都直接或间接的继承这个类 - 方法 public String toString() 返回当前对象中的内容, 对于Object类默认操作来说,返回的对象的类型+@+内存地址值 public boolean equals(Object obj) 比较两个对象内容是否相同,对于Object类默认操作来说,比较的是地址值 StringBuffer/StringBuilder: 方法 ~~~ public StringBuffer append(String str) 在原有字符串缓冲区内容基础上,在末尾追加新数据 public StringBuffer insert(int offset,String str) 在原有字符串缓冲区内容基础上,在指定位置插入新数据 public StringBuffer deleteCharAt(int index) 在原有字符串缓冲区内容基础上,删除指定位置上的字符 public StringBuffer delete(int start,int end) 在原有字符串缓冲区内容基础上,删除指定范围内的多个字符 public StringBuffer replace(int start,int end,String str)在原有字符串缓冲区内容基础上,将指定范围内的多个字符 用给定的字符串替换 public StringBuffer reverse() 将字符串缓冲区的内容 反转 "abc"----"cba" public String substring(int start) 从指定位置开始,到末尾结束,截取该字符串缓冲区,返回新字符串 public String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串缓冲区,返回新字符串 ~~~ 创建一个字符串缓冲区对象。用于存储数据。 ~~~ StringBuffer sb = new StringBuffer(); sb.append("haha"); //添加字符串 sb.insert(2, "it");//在指定位置插入 sb.delete(1, 4);//删除 sb.replace(1, 4, "cast");//替换指定范围内的内容 String str = sb.toString(); ~~~ # 注意 append、delete、insert、replace、reverse方法调用后,返回值都是当前对象自己, 所以说,StringBuffer它可以改变字符序列的长度和内容 # String,StringBuffer,StringBuilder区别 ~~~ public synchronized StringBuffer append(int i) ~~~ * String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 * StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 * StringBuilder 字符串变量 可变 非线程安全 字符串拼接直接在字符串后追加 1. StringBuilder执行效率高于StringBuffer高于String. 2. String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象, StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方 法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer 是 线程安全的而StringBuilder是线程非安全的,所以StringBuilder的效率高于 StringBuffer. 3. 对于大数据量的字符串的拼接,采用StringBuffer,StringBuilder. Stringbuilder 执行效率要高于stringbuffer 更高于string String是变量 是不可变的 所以在在+ = 赋值的时候创建新的对象 Stringbuffer stringbuilder 俩个都是可变的,当在字符串拼接的时候可以采用appent方法,在原有的基础上追加,所以性能比string 更高 ,有因为stringbuffer是现成安全的 but stringbuilder是线程非安全的 所以 stringbuilder比stringbuffer效率更低 对于大数据字符串拼接 可以采用stringbuffter 或是 stringbuilder