1. String
String其实就是一个被final修饰的字符数组,被final修饰就注定了它是不可变的,如果执行以下代码,原理是什么样的呢?
首先,hello会开辟一个内存空间,world也会开辟一个内存空间,str并不是等于hello + world,而是再开辟一个内存空间存储hello world。
2. StringBuilder与StringBuffer
这两个面试很常见,它们都是继承自AbstractStringBuilder,虽然它们底层也是也都是字符数组,但是因为没有被final修饰,因此是可变的。
(transient关键字与序列化有关,如果不想某个属性在序列化的时候被序列化,就在这个属性前添加这个关键字)
StringBuffer与StringBuilder相比,是线程安全的,因为它的方法里面用到大量的synchronized,但是相对的性能也是低下的。
再看看StringBuilder的
至于性能的演示,可以自行演示加了synchronized和不加synchronnized的速度即可(synchronnized让某一个时刻只能有一个线程在执行,性能不用说了)。
PS:上文中的图片或资源来源于网络或本人原创,仅供学习与参考,如有侵权,请私信作者进行删除。