java 中操作字符串都有哪些类?它们之间有什么区别?

您所在的位置:网站首页 java操作字符串都有哪些类 java 中操作字符串都有哪些类?它们之间有什么区别?

java 中操作字符串都有哪些类?它们之间有什么区别?

2024-07-12 16:41| 来源: 网络整理| 查看: 265

有三个分别是String,StringBuffer,StringBuilder。

1.String

String是不可变得对象,在堆中,String的改变会非常消耗内存,直接上图

所以只是在String str="hello" 变成String str="hello"+"world"堆就占了三个内存,还有两个是无引用对象,这太浪费了。所以在经常改变字符串值得String类型不要用String

2.StringBuffer与StringBuilder

StringBuffer和StringBuilder在修改的时候与String不同,StringBuffer与StringBuilder是在原有的基础上修改,不产生新的未使用对象,不会改变引用。也就是不会产生新对象,StringBuffer是线程安全的,但是StringBuilder是线程不安全的,StringBuffer在大多数情况下比String块,但是比不上StringBuilder。所以单线程建议用StringBuilder,多线程建议用StringBuffer。

StringBuffer和StringBulider只能new,不能进常量池。

每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 

3.在某些特殊情况下,String的速度会优于StringBuffer比如说

String S1 = "This is only a" + " simple" + " test";

StringBuffer Sb = new StringBuffer("This is only a").append(" simple").append(" test");

在这个例子中S1 String 对象的字符串拼接"This is only a" + " simple" + " test";会直接在编译期就合并成常量This is only a simple test

在jvm眼里S1是这样的  String S1 = “This is only a simple test”; 但是如果是

String S2 = “This is only a”;

String S3 = “ simple”;

String S4 = “ test”;

String S1 = S2 +S3 + S4;那么jvm还会按照老规矩去一步一步弄。并且创建一堆无引用对象。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3