这是一个高频考点,一般面试也会遇到,接下来我们会从源码角度区分这三个的区别和实用场景。
1.简单的分析
string: 点开源码。string用的是final类型,表明这个字符串不可变,并且实现了java.io.Serializable, Comparable, CharSequence三个方法。final类表明不能被继承、fina表示成员变量,一旦被修改赋值,就不能再次赋值,只能赋值一次。final方法不能被覆盖,但是能被继承。
stringbuffer和stringbuild: 点开源码。我们可以明显的看到这这块方法里面加了个同步锁,这个后面会说到加锁的意义。stringbuffer继承了AbstractStringBuilder类,实现了两个方法,这个和stringbuild都是一样的,他们两个在代码上的区别就是 : stringbuffer的append方法加锁和加了一个toStringCach清空缓存的方法。 而stringbuild这两个都没有。
下面是类的关系继承图: