StringBuilder和StringBuffer内部都是通过char[]来实现的。(jdk1.9后,底层把char 数组变成了byte[]。)唯一不同的就是StringBuffer内部操作方法都加上了synchronized关键字,因为保证了线程安全,同时效率相比StringBuilder较低。
String不可变的好处:
1.安全,由于String是不可变的,天生就具备了线程安全。
2.String经常作为参数,String不可变,代表参数不可变。
3.常量池的需要,String在开发中,经常被使用,常量池会对String进行缓存,只有String不可变,常量池才有意义,节约内存空间。
4.当String作为HashMap或者其他散列表key的时候,因为String不可变,所以其hash值也不会发生改变,不需要每次去计算,可以缓存其hash值,提高Hash表的效率。