String字符串与StringBuffer、StringBuilder的区别以及String的不可变性是什么

String字符串是八个基本数据类型之一,其底层实现是通过字符数组来进行实现的,也就是

String字符串与StringBuffer、StringBuilder的区别以及String的不可变性是什么_第1张图片

abc的字符数组与abc的字符串是完全相等的。

StringBuilder与StringBuffer都继承相同的父类AbstractStringBuilder ,这两个方法都提供了一些字符串的基本操作,比如append()使两个字符串进行相加。

其中String与StringBuffer是线程安全的,StringBuilder是线程不安全的,因为StringBuilder是直接修改字符串内部,而String与StringBuffer是不会修改内部内容,而是new一个新的对象,并将原来的地址进行覆盖。所以多线程访问时,拿到的是同一个String字符串,但是进行写操作时,每个线程写的过程是隔离的,因为会创建不同的对象,使用不同的空间。

再说String的不可变性:

因为String源码关键字使用public final class String,这显然是固定了String类的,使得子类无法继承,从而无法重写String。

除此之外,String底层使用private final char[] value来存储字符串,由于使用private,对外部不可见,String内部不提供直接修改的操作,所以外部没法修改,并且使用final关键字,无法修改当前value的值

你可能感兴趣的:(java,开发语言)