Java中的String,StringBuilder,StringBuffer三者的区别详解

Java中的String,StringBuilder,StringBuffer三者的区别详解,第1张

Java中的String,StringBuilder,StringBuffer三者的区别详解

  在最近的Java学习过程中,对String,StringBuilder,StringBuffer这三者的区别有疑问,自己上网查询资料后,在这里整理下,加深自己知识点的同时,便于大家查看,如有错误的地方,还请小伙伴们指正!

目录
    • **1.运行速度**
    • **2.线程安全**

String,StringBuilder,StringBuffer三者的区别主要在两个方面:

1.运行速度

运行速度快慢为:StringBuilder > StringBuffer > String

String在三者中最慢的原因为:

String为字符串常量,而StringBuilder和StringBuffer都为字符串变量,String对象创建后该对象是不可更改的,但是后两者的对象是变量,是可以更改的。

以一段代码为例:

String str="abcd";
System.out.println(str);
str=str+"efg";
System.out.println(str);

  运行这段代码后,结果是先输出“abcd”,后输出“abcdefg”,那么String的对象str被更改了,这与上面在String对象创建后该对象是不可更改的有矛盾,其实不然,JVM对于这几行代码处理是,先创建一个String对象str,把“abcd”赋值给str,重点是在第三行中,JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“efg”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了这并不冲突。所以,Java中对String对象进行的 *** 作实际上是一个不断创建新的对象还将旧的对象回收的过程,执行速度会很慢。

StringBuilder和StringBuffer都为字符串变量,可以直接对变量对象进行更改,不用再创建新的对象和回收旧的对象了,速度自然比String快很多

2.线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

  如果一个StringBuffer的对象在字符串缓冲区被多个线程使用时,StringBuffer中的很多方法带有synchronized关键字,用来保证其线程安全,但StringBuilder的方法则不存在该关键字,所以不能保证线程安全,可能会因为多线程问题出现一些错误的 *** 作,所以如果要进行多线程的 *** 作,那么就要使用StringBuffer,在单线程的情况下,建议采用StringBuilder,速度较快。

写在最后:
String:适用于少量的字符串 *** 作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量 *** 作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量 *** 作的情况

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5696297.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存