java之可变字符串

1. 为什么要使用StringBuffer或者StringBuilder

  StringBuffer和StringBuilder都是带有缓冲区的可变字符串,就是存放字符串的一段空间内,其内容可以被修改。

   一个String对象的长度是固定的,不能改变它的内容,也不能附加新的字符至String对象中。可以使用加号“+”运算符来连接字符串以达到附加新字符或字符串的目的,但使用加号“+”运算符会产生一个新的String实例,即需要另外分配空间。如果既想节省开销,又能改变字符串的内容,则可以使用StringBuilder类。

2. StringBuffer类

StringBuffer类的构造方法
 1. StringBuffer()、StringBuffer(String s)

StringBuffer的常用方法
 1. StringBuffer append(int i)在可变字符串末尾追加I
 2. StringBuffer insert(int offset,String s)在可变字符串指定位置插入另外一个字符串s
 3. int length() 返回可变字符串中字符的个数
 4. String toString() 将可变字符串转化为字符串对象

在这里插入图片描述

字符串总结
 1. String类、StringBuffer和StringBuilder之间的区别
 2. String字符串是常量,一旦创建无法修改
 3. StringBuffer和StringBuilder是可变字符串,创建之后仍可以修改
 4. StringBuffer是线程安全的、StringBuilder线程不安全

3. StringBuffer类转String类

在这里插入图片描述

4. String类、StringBuffer和StringBuilder之间的区别

  String字符串是常量,一旦创建无法修改,如果想要为String b重新赋值,该字符串会存放在字符串常量池的另一个内存空间,并不是在原来的字符串空间上修改字符串。

StringBuffer和StringBuilder是可变字符串,创建之后仍可以修改。

StringBuffer是线程安全的、StringBuilder线程不安全。

在这里插入图片描述

5. 解释线程安全与不安全

线程安全就是排队问题
 1. 比如我写了一个文档共享在网上,其中甲乙丙丁4个人要在网络上打开上,若是同时打开并且都对该文档修改并且保存后,只会保存最后一个人的修改,前三个人的都会被覆盖,这就是线程不安全
 2. 若是线程安全,则只要甲乙丙丁有一个人打开,其他人再想打开,会提示请排队,只有前面的人关闭该文档后,下一个人才会打开该文档

举个银行存钱的例子,银行卡都有主卡和副卡共用一个账户
 1. 线程不安全:如果该账户中有100元,主卡和副卡同时操作,主卡存50元,副卡取50元,当副卡取钱时,如果主卡存50元后还没有计算完,那副卡显示账户就是100元,即取完50后 = 50元,当主卡存钱后机器计算完后为150元即副卡账户中的钱被覆盖为150元
 2. 线程安全:当主卡正在操作时,如果副卡也想操作,那将会提示请等待主卡操作完,最终结果就是100元

猜你喜欢

转载自blog.csdn.net/weixin_43088443/article/details/112970933
今日推荐