Java中StringBuffer、StringBuilder和String(+)区别

        Java中,有很多功能都差不多相同的函数,而这里说我要在这里说StringBuffer、StringBuilder和String这三个函数就是功能差不多,但是还是有所不同的,毕竟如果都一样或者说某个函数的所有功能性都碾压其他函数,那其他函数就没有存在的必要了,所以说每个函数都是有其存在的必要,存在即合理

  1. String 类对象不可变,一旦修改 String的值就是隐形的重建了一个新的对象,释放了原 String对象;大致意思是:+号拼接字符串时,因为String 类对象是不可变的,所以你一旦拼接新的字符串时,它又是一个新的对象;它不是在原本的基础上去加,而是创建一个新的对象);
  2. StringBuffer和StringBuilder类是可以通过append()、insert()、reverse()....等方法 来修改值。创建的对象是可变;因为StringBuffer和StringBuilder类是可变的所以它只需要创建一次对象;

:你可以把对象理解为一个容器,比较好理解这些概念;

区别:String 类StringBuffer和StringBuilder类的区别,从上面可以得出String 类,

每添加一个新的字符串是要释放原 String对象,创建新对象;而StringBuffer和StringBuilder类只要不断的添加就行,不会去创建新对象;所以也就可以很好的解释了为什么:符串连接 String 的 + 比 StringBuffer(StringBuilder) 的 Append() 性能差了很多;

 

  1. StringBuffer类在线程安全的方面比较好,它涉及到线程同步和异步的问题,而StringBuffer类是线程同步,所以它是线程安全的,但是它因为线程同步所以导致它比StringBuilder慢;

 

  1. StringBuilder类是线程非安全的,它是线程异步,也正因为线程异步所以它速度比较快一点;

 

区别: 1. ingBuffer:线程安全的; StringBuilder:线程非安全的;

       2. 三者在执行速度方面的比较:StringBuilder > StringBuffer > String;

写法上也是有区别的:

String的写法:

Java中StringBuffer、StringBuilder和String(+)区别

StringBuilder的写法:

Java中StringBuffer、StringBuilder和String(+)区别

而StringBuffer和StringBuilder的写法差不多只是创建实例的时候不一样;

Java中StringBuffer、StringBuilder和String(+)区别

前面的概念都没有提到string的优势,在图片中就可以看出来了,就是书写比较方便,直接用+号去拼接就行,同样是拼接相同的字符串,一样的输出效果,string就显得方便和简洁;但是一般不推荐使用,一个两个拼接没事,但是要拼接的字符串多就不太好了;

前面提到了StringBuffer和StringBuilder类是可变得,因为它是在原对象上直接进行操作,不需要在创建对象;

下面写一下常用操作方法:

Java中StringBuffer、StringBuilder和String(+)区别