栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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:适用多线程下在字符缓冲区进行大量操作的情况

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号