转载声明:文章来源:https://blog.csdn.net/jchsadasd/article/details/121988774
最近在学习java的时候,遇到了一个问题,就是String和StringBuilder之间到底有什么区别呢?
首先我们先来了解这两个类:
String:
String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
字符串不变; 它们的值在创建后不能被更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,它们可以被共享。 例如:
相当于:
特点:
String通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同。以双引号方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,jvm都只会建立一个String对象,并在字符串池中维护。整理这段文字,大概可以理解成new后虽然可能相同,但是地址一定是不同的,而本质上却又是同一个对象。
StringBuilder:
一个可变的字符串类,我们可以把它看成一个容器,这里的可变值的是StringBuilder对象中的内容是可变的。值得注意的点是,前面赋的值会被后面赋的值所替代,输出的对象也会更新为最新赋的值。可以理解成StringBuilder只能装一个数据,后面只要数据更新,前面赋的值都会变成数据更新这个值 。
例如:
这样很形象的说明了它们用的都是同一个地址。
该类被设计为在字符串缓冲区被单个线程使用的地方(作为一般情况)用作StringBuffer替代替代。 在可能的情况下,建议使用这个类别优先于StringBuffer因为它在大多数实施中将更快。但是StringBuilder实例不能安全使用多线程。 如果需要同步,那么建议使用StringBuffer 。
一个StringBuilder的主要操作是append和insert方法,它们是重载的,以便接受任何类型的数据。
总结:
String和StringBuilder有哪些区别呢?
1:String的值不可变,StringBuilder的值是可变的。String每赋予一个值,都会产生一个新的地址,而StringBuilder是在原有地址上一直更改的,节省了大量的空间,这也代表了它运行的速度更快。
速度上来说:StringBuilder>String。
2:将 StringBuilder 的实例用于多个线程是不安全的,它不像String一样,在最后会被final修饰不可更改,所以需要这样的同步,则建议使用 StringBuffer,单独同步处理则使用StringBuilder。
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
时隔几月再来看,还是没理解透彻