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

String和StringBuffer/StringBuilder

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

String和StringBuffer/StringBuilder

目录

String和StringBuffer/StringBuilder的区别:

为什么String在字符串拼接时影响性能:

String类:

String类不可变:

StringBuffer和StringBuilder:


String和StringBuffer/StringBuilder的区别:

       Java平台提供了两种字符串类型,String和StringBuffer/StringBuilder,这两种类型都可以存储字符串。其中String是可读字符串,不能直接修改。StringBuffer/StringBuilder可以直接修改。在字符串频繁拼接时,使用String对象会消费String池的空间,需要运行垃圾回收机制影响性能。所以在字符串频繁拼接时建议使用StringBuffer和StringBuilder。

为什么String在字符串拼接时影响性能:

String类:

        String类在java.lang包中,代表字符串,Java程序中所有的字符串文字都被视为此类的实例。

public final class String 
extends Object 
implements Serializable, Comparable, CharSequence

String类不可变:

        String类中存在成员变量value,value指向一个字符数组,这个数组用来存储字符串的字符。变量value在声明时使用final修饰,所以在赋值后不能在指向其他的地址,并且在String类中并没有提供修改value指向的数组的方法,所以String类型的值是不可变的。

        在StringBuffer类中提供了修改这个数组元素的方法,所以StringBuffer是可变的。

        在用String拼接字符串时,由于String是不可变的,在拼接时会自动创建StringBuffer对象并调用append和toString方法拼接字符串,每拼接一次就会创建一个对象,虽然Java中有垃圾回收机制的存在,但垃圾回收机制的运行与否和何时运行都是不可控的,所以在字符串频繁拼接时会影响性能、占用空间。

StringBuffer是可变的,相比String在字符串拼接时节省了创建对象和回收对象的时间,所以在字符串频发拼接时StringBuffer的性能优与String。

StringBuffer和StringBuilder:

        StringBuilder是在java5中引用的,它与StringBuffer的方法完全相同。StringBuffer的大部分方法都使用的synchronized修饰,而StringBuilder的所有方面都没有被synchronized修饰。所以StringBuilder适用于单线程,在效率上要比StringBuffer高,但在安全性上低于StringBuffer。

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

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

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