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

一、String类的缺点

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

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

java之StringBuffer类、String类和StringBuilder类的区别_第1张图片

上图:会产生三个数组“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类。因为单线程不会不安全。

你可能感兴趣的:(java基础笔记)