java之StringBuffer类、String类和StringBuilder类的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33322074/article/details/86425548

一、String类的缺点

String类定义的字符串是不可变得。比如:String str="new";对于字符串“new” 是定义好的不能变得这是一个固定好的数组。这样就大大浪费了内存空间为什么呢?

因为:string本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低.NET编译器的工作效率。string操作示意图

上图:会产生三个数组“abc”,“de”, "abcde"三个数组,可见String非常浪费资源。而StringBuffer只会有一个数组。

即:StringBuffer是线程安全的可变数列。 

二、思考一个问题:StringBuffer类如何实现字符序列可变。

1、因为StringBuffer类的方法append、delete、insert、replace、reverse方法调用后,返回值都是当前对象自己,可以再进行调用,所以说,StringBuffer它可以改变字符序列的长度和内容

2、注意:java中的索引问题开始和结束,一般都是包含开始,不包含结尾。用藏头露尾来说。如果想包含结尾可以用.length()方法代表。

三、StringBuilder类

StringBuilder类和StringBuffer类是孪生兄弟类,也就是他们的API文档相同。StringBuffer是一个线程安全的类,由于线程安全了速度会有点慢,StringBuilder类是一个线程不安全的类。但是速度要比StringBuffer类快。在单线程开发中尽量使用StringBuilder类。因为单线程不会不安全。

猜你喜欢

转载自blog.csdn.net/qq_33322074/article/details/86425548
今日推荐