JAVA基础——String,StringBuilder,StringBuffer的区别。

来源:互联网 发布:手机本地端口号 编辑:程序博客网 时间:2024/05/28 15:25

Java中我们常用来修饰字符串的三个定义字符串的是String,StringBuilder,StringBuffer。

一、String

作为程序员最常用的String,我们经常运用String来定义字符串。

例如局部变量,全局变量、类的属性等,我们都会用到String。

查看Java API 底层的String定义为final char value[].

即不可类,任何对String的改变都会生成一个新的变量。


二、StringBuilder

StringBuilder,我们直接看底层



StringBuilder 的底层定义为 char[] value,即StringBuilder 是一个可变类。

对其所指带的变量的改变都不会产生新的变量。

三、StringBuffer



通过底层查看 我们发现StringBuffer底层也是char[] value

那StringBuffer和StringBuilder我们可以确定都是一个可变类,即其所指带的变量的改变都不会产生新的变量。

那么疑问来了 StringBuilder和StringBuffer之间的区别呢?

四、StringBuilder和StringBuffer之间的区别。

StringBuilder和StringBuffer之间的区别,我们可以参照HashTable和HashMap。

我们知道HashTable是线程安全的,而HashMap不是。在单线程下,我们更多的使用的是HashMap,因为HashMap的效率更高。StringBuffer和Stringbuilder和他们的原理和操作基本相同。追查底层我们会发现StringBuffer的append用重载加入了synchronized方法,


而StringBuilder则没有


使用场景:

StringBuffer是线程安全的,适合在多线程的环境中使用。

而StringBuilder不是线程安全的,不支持并发,但效率较高,不适合在多线程环境中使用。

新引入的StringBuilder不是线程安全的,但其在单线程中的使用效率较高。


本文也阅读了一些CSDN大牛的描述,包括测试StringBuilder和StringBuffer的效率问题,以及Stringbuffer和StringBuilder的一些常见接口。经过自己的阅读,还是配合源码才能理解。

阅读全文
1 0