String类
- string对象用于保存字符串,也就是一组字符序列
- “jack”字符串常量,双引号括起来的字符序列
- 字符串的字符使用Unicode编码,一个字符占两个字节
- String类有多构造器,构造器的重载
- string实现了两个接口:Serizlizable:String可串行化:可以在网络上传输
- 接口:Comparable String 对象可以比较大小
- String是final类,不能被其他类继承
- String有属性 private final char value【】用于储存字符串内容
- value是一个final类型,不可以修改的是地址,而不是内容,不能指向新的地址,而不是内容
- 两种创建方式
- string a ="abc";
先从常量池中查找有没有abc常量,如果没有,那么则创建一个常量abc,并将abc赋值给a
- string b=new string("abc");
现在堆中创建空间,里面维护了value属性,指向常量池的abc空间,如果常量池没有abc,那么重新创建abc,如果有那么直接指向value,最终指向堆中的空间
String类的常用方法
string类是保存字符串常量的,每次更新都需要开辟新的空间,效率低,因此提供了StringBuffer和StringBuilder两种来增强String的功能,提高效率
StringBuffer类
java.lang.StringBuffer代表可变的字符系列,可以对字符串内容进行增删改查
很多方法和string一样,但是stringBuffer是可以改变长度的
- String保存的是字符串常量,里面的值不能更改,每次string类的更新,实际上是更改地址,效率低
- StringBuffer保存的是字符串变量,里面的值是可以更改的,每次stringBuffer的更新实际上可以更新内容,不用每次都更改地址,效率高//char[]value放在这个堆里
- StringBuffer是一个final类,所以不可以被继承
- string Buffer的直接父类是AbstractStringBuilder
-
StringBuffer的默认长度为16
-
可以自定义字符大小的范围
-
如果给予一个String,那么字符串大小为String.length+16
stringBuffer和Stirng的转换
- string转为StringBuffer
String str="hello,World";
//方式1
StringBuffer stringbuffer=new StringBuffer(str);
//注意的是返回的才是StringBuffer对象,str本身没有变化
//方式2
StringBuffer StringBuffer1=new StringBuffer();
stringbuffer1=stringbuffer1.append(str);
- stringBuffer转成string类型
StringBuffer StringBuffer2=new StringBuffer("你好");
//方式一
string str2=stringBuffer2.toString();
//方式二
string str2=new String(stringBuffer2);
StringBuffer常用方法
- 增 (append
- 删(delete
s.delete(11,14)//前闭后开
删除索引为11以后的,14以前的,包括11
- 更改 (replace
s.replace(13,15,"聂奥");
//将索引为13到15的字符替换成"聂奥"
- 查找
int indexOf=s.indexof("张三丰");
//查找字符串第一次出现的索引,如果没有返回-1
- 插入
s.insert(9,"赵敏");
//在索引为9的位置插入赵敏,原来为9的字符串往后移
- 长度
s.length()
返回String Buffer的长度
StringBuilder
- StringBulider继承了AbstractStringBuilder类
- 实现了Serializable,说明StringBulider对象是可以串行化的,对象可以网络传输,可以保存到文件
- StringBulider是final类,不能被继承
- StringBuilder对象字符序列仍然是存放在父类中,因此字符依然是放在堆中
- StringBuilder的方法,没有做互斥的处理,没有synchronized关键字,因此在单线程中使用
string ,stringBuilder,StringBuffer的对比
- stringbuffer和stringbuilder非常类似,均代表可变的字符序列,而且方法也一样
- string:不可变字符序列,效率低,但是复用率高
- stringBuffer:可变字符序列,效率较高(增删),线程安全,
- stringBuilder:可变字符序列,效率最高),线程不安全
- string使用说明:
如果我们对string做大量修改,建议不要使用string,因为会非常浪费资源
- stringbuilder stringBuffer stringstringbuilder stringbuffer string string-stringbuffer-stringbuilder stringbuilder stringbuffer string java string-stringbuffer-stringbuilder stringbuilder stringbuilder stringbuffer场景string 端面stringbuilder stringbuffer string string stringtokenizer stringbuilder stringbuffer stringbuilder stringbuffer stringbuilder stringbuffer stringjoiner stringbuilder stringbuffer 20230406日记