JavaSE基础 (二十三)

StringBuffer/StringBuilder

所属的包

java.lang包

String

Serializable,CharSequence,Comparable
非常特殊的类 可以像常量一样创建对象
String str = "abc";
内存存储 "abc"对象 char[] value
String的不可变特性   private fianl char[] value
频繁的修改内容的时候 性能不是很好

默认继承

obJect 实现接口Serialzable,CharSequence,Appendable
StringBuffer/StringBuilder 没有compare To方法
StringBuffer/StringBuilder 含有一个String没有的方法 append();拼接

特性

可变字符串 char[] value;动态扩容

对象的构建

无参数构造方法
有参数构造方法
//无参数构造方法 构建一个默认长度16个对象空间 char[]
 StringBuilder builder = new StringBuilder();
//利用给定的参数 构建有一个自定义长度空间的对象 char[]
 StringBuilder builder = new StringBuilder(20);
//利用带String参数的构造方法,默认数组字符长度字符串+16个长度
 StringBuilder builder = new StringBuilder("abc");

StringBuilder中的常用方法

最主要的方法 append() 频繁的拼接字符串时候使用此方法 提高性能
capcacity();字符串底层char[]的容量
length();字符串有效元素个数(长度)
char = charAt(int index);
int = codePointAt(int index);
String = substring(int start,[int end]);
        注意需要接收返回值 看见取出来的字符串效果
delete(int start,[int end]);
        String Builder类中独有的方法String类没有
        将Start到end之间的字符串删掉 不用接收返回值就看到效果啦
int = indexOf(String str,[int fromindex]);
int = lastindexof(String str,[int fromIndex])
        找寻给定的str字符串中第一次出现的索引位置 带重载 则从某一个位置开始找
StringBuilder = deleteCharAt(int Index)
        String类中没有的方法
        将给定inde位置的某一字符串删除
insert(int index,value);
        将给定的value插入在index上
replace(int start,int end,string str);
        将start和end之间的部分替换成str
        builder.replace(2.5,"zzt")
setCharAt(int index,char value);
        将index位置的字符改成给定字符的value
toString()
        将StringBuilder对象 构建成一个string对象 返回
trimToSize()
        将数组无用的容量去掉 变成length长度的数组

知识总结

StringBuilder类不一定需要

是为了避免String频繁拼接修改字符串信息时才使用的 底层是数组是可变的 提高了性能

常用方法

与String类不同独有的方法
append() lnsert() delete() deleteCharAt() reverse()
与String类相同的方法
charAt() codePointAt() indexOf() lastindexOf() replace() 名字相同 用法不一致
不是很常用的方法
ensureCapacity() capacity() SetLength() trimToSize() setCharAt();

String家族笔试中经常考察的知识点

String所属的包 继承关系 实现接口

java.lang包 继承Object 实现接口Serializable,CharSequence,Comparable

String构建方式

常量 构造方法

String对象内存结构

字符串常量区 new堆内存对象
= = equals()区别
"a" +"b"+"c"

String不可不变特性

长度及内容

String类常用的方法—-与StringBuilder的区别

concat(); toUpperCase();

String和StringBuilder区别|String和StringBuffer区别

String不可变字符串
        有一个接口Comparable
        不可变体现在长度及内容
        有一些方法StringBuilder没有 没有concat compareTo toUpperCase
StringBuilder可变字符串
        JDK1.5
        有一个接口Appendable
        可变字符串 没有final修饰 底层可以进行数组扩容
        有一些方法string没有 append() insert() delete() reverse()

StringBuffer和StringBuild的不同

stringBuffer早期版本1.0
StringBuilder后来的版本1.5
方法使用几乎一致
早期版本 线程同步  安全性比较高 执行效率相对较低
后期版本 线程非同步 安全性能比较低 执行效率相对较高