string类,stringbuilder以及stringBuffer

发布时间 2023-04-21 17:39:43作者: 寇

String类

  1. string对象用于保存字符串,也就是一组字符序列
  2. “jack”字符串常量,双引号括起来的字符序列
  3. 字符串的字符使用Unicode编码,一个字符占两个字节
  4. String类有多构造器,构造器的重载
  5. string实现了两个接口:Serizlizable:String可串行化:可以在网络上传输
  6. 接口:Comparable String 对象可以比较大小
  7. String是final类,不能被其他类继承
  8. String有属性 private final char value【】用于储存字符串内容
  9. value是一个final类型,不可以修改的是地址,而不是内容,不能指向新的地址,而不是内容
  • 两种创建方式
  1. string a ="abc";

先从常量池中查找有没有abc常量,如果没有,那么则创建一个常量abc,并将abc赋值给a

  1. string b=new string("abc");

现在堆中创建空间,里面维护了value属性,指向常量池的abc空间,如果常量池没有abc,那么重新创建abc,如果有那么直接指向value,最终指向堆中的空间

String类的常用方法

string类是保存字符串常量的,每次更新都需要开辟新的空间,效率低,因此提供了StringBufferStringBuilder两种来增强String的功能,提高效率

StringBuffer类

java.lang.StringBuffer代表可变的字符系列,可以对字符串内容进行增删改查

很多方法和string一样,但是stringBuffer是可以改变长度的

  1. String保存的是字符串常量,里面的值不能更改,每次string类的更新,实际上是更改地址,效率低
  2. StringBuffer保存的是字符串变量,里面的值是可以更改的,每次stringBuffer的更新实际上可以更新内容,不用每次都更改地址,效率高//char[]value放在这个堆里
  3. StringBuffer是一个final类,所以不可以被继承
  4. string Buffer的直接父类是AbstractStringBuilder
  • StringBuffer的默认长度为16

  • 可以自定义字符大小的范围

  • 如果给予一个String,那么字符串大小为String.length+16

stringBuffer和Stirng的转换

  1. string转为StringBuffer
String str="hello,World";
//方式1
StringBuffer stringbuffer=new StringBuffer(str);
//注意的是返回的才是StringBuffer对象,str本身没有变化
//方式2
StringBuffer StringBuffer1=new StringBuffer();
stringbuffer1=stringbuffer1.append(str);
  1. stringBuffer转成string类型
StringBuffer StringBuffer2=new StringBuffer("你好");
//方式一
string str2=stringBuffer2.toString();
//方式二
string str2=new String(stringBuffer2);

StringBuffer常用方法

  1. 增 (append
  2. 删(delete
s.delete(11,14)//前闭后开
    删除索引为11以后的,14以前的,包括11
  1. 更改 (replace
s.replace(13,15,"聂奥");
//将索引为13到15的字符替换成"聂奥"
  1. 查找
int indexOf=s.indexof("张三丰");
//查找字符串第一次出现的索引,如果没有返回-1
  1. 插入
s.insert(9,"赵敏");
//在索引为9的位置插入赵敏,原来为9的字符串往后移
  1. 长度
s.length()
    返回String Buffer的长度

StringBuilder

  1. StringBulider继承了AbstractStringBuilder类
  2. 实现了Serializable,说明StringBulider对象是可以串行化的,对象可以网络传输,可以保存到文件
  3. StringBulider是final类,不能被继承
  4. StringBuilder对象字符序列仍然是存放在父类中,因此字符依然是放在堆中
  5. StringBuilder的方法,没有做互斥的处理,没有synchronized关键字,因此在单线程中使用

string ,stringBuilder,StringBuffer的对比

  1. stringbuffer和stringbuilder非常类似,均代表可变的字符序列,而且方法也一样
  2. string:不可变字符序列,效率低,但是复用率高
  3. stringBuffer:可变字符序列,效率较高(增删),线程安全,
  4. stringBuilder:可变字符序列,效率最高),线程不安全
  5. string使用说明:

如果我们对string做大量修改,建议不要使用string,因为会非常浪费资源