有一个问题在java工程师的面试中出现的频率很高,那就是String和StringBuffer的区别,在分别在什么时候使用?在我被面试和面试其他人的时候都出现过。而从jdk1.5中出现StringBuilder这个类之后,这个问题就变成了:Java的String,StringBuffer,StringBuilder有什么区别?
这个问题在网上一搜索就会出现很多结果,而且我觉得大多数都是对的。那就是:String是不可变类,每次在String对象上的操作都会生成一个新的对象;StringBuffer和StringBuilder则允许在原来对象上进行操作,而不用每次增加对象;StringBuffer是线程安全的,但效率较低,而StringBuilder则不是效率最高。
这个答案我是很早都知道的,而且实际应用中也是这样做的,经常变化的时候用StringBuilder或者StringBuffer。但是为什么是这样的是最近才晓得的,而了解的方法非常简单,就是阅读jdk的源代码:
String和StringBuffer,StringBuilder都是用字符数组来表示的。但是在String中这个字符数组是这样定义的:
/** The value is used for character storage. */
private final char value[];
而在StringBuffer和StringBuilder中,这个字符数组都是继承于java.lang.AbstractStringBuilder中的
/**
* The value is used for character storage.
*/
char value[];
这样答案就很明显了,原因就在这个final关键字上。
而同时通过源代码可以发现StringBuffer的很多方法和属性都有synchronized关键字修饰,而StringBuilder则没有。
就是这样的,源代码胜过一切文档和专家老师的讲解。
Java的String,StringBuffer,StringBuilder
最新推荐文章于 2022-03-03 16:34:00 发布