前言
看见即降服,这句话说的是一件事物,只要你看得到,你就能得到。
对我来说记录就是看见。
面试题不只是为了面试,更是为了帮助我们更深入地理解我们已知的知识。
String和StringBuffer/StringBuilder的区别
- String是不可变的字符串
- StringBuffer/StringBuilder是可变的字符串
StringBuffer/StringBuilder是可变的字符串
StringBuffer/StringBuilder是可变的字符串这个应该很好理解,因为我们创建StringBuffer/StringBuilder对象的时候可以通过append()方法来改变对象的内容。
StringBuilder sb=new StringBuilder("abc");
sb.append("efg");
上面代码中,一开始sb引用指向的内存地址的内容是abc
,通过调用append方法后,sb引用指向的内存地址内容变为abcdefg
。
String是不可变的字符串
下面来说一下,为什么String是不可变的,大家也可以查看文章底部的参考链接,我在这里按我的理解总结一下。
其实很简单,主要有两个原因导致String的对象是不可变的:
1.String类的属性的修饰符不是final就是private,也就是说String没有提供类似像StringBuffer/StringBuilder的append方法来修改已经创建的String对象。
2.String是个final类,我们不能继承String类,也就无法添加类似append的方法来修改已经创建的String对象。
StringBuffer和StringBuilder的区别
一句话,StringBuffer是线程安全的,而StringBuilder是非线程安全的。