介绍 先来看String类的实现 public final class String implements java . io . Serializable , Comparable String , CharSequence { /** The value is used for character storage. */ private final char value []; } 先来说一下final关键字
介绍
先来看String类的实现
public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}
先来说一下final关键字的作用
可以看到String类和保存变量的value数组都被final修饰,表明String类是不可变的。
StringBuffer和StringBuilder都继承自AbstractStringBuilder类,看一下AbstractStringBuilder类的定义
/**
* The value is used for character storage.
*/
char[] value;
}
看到区别了吗?value数组没有用private和final修饰,说明了StringBuffer和StringBuilder是可变的。
而StringBuilder和StringBuffer的方法是差不多的,只不过StringBuffer在方法上添加了
synchronized关键字,所以在多线程环境下我们要用StringBuffer来保证线程安全,单线程环境下用StringBuilder来获得更高的效率。
看2个类中同一个方法的定义
// StringBuffer@Override
public synchronized StringBuffer append(char[] str) {
toStringCache = null;
super.append(str);
return this;
}// StringBuilder
@Override
public StringBuilder append(char[] str) {
super.append(str);
return this;
}
因为StringBuffer和StringBuilder的实现类似,所以性能比较就落在String和StringBuilder之间了。
用源码证实一下
// Stringpublic String substring(int beginIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
int subLen = value.length - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}// StringBuilder
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
介绍完毕,所以你应该知道这道题应该怎么答了
常见面试题
1.说一下String StringBuffer StringBuilder的区别?
我用例子解释一下第五条
public static void main(String[] args) {String a = "a";
String b = "b";
String c = a + b;
String d = "a" + "b" + "c";
}
反编译class文件后是这样的
public static void main(String[] args) {String a = "a";
String b = "b";
(new StringBuilder()).append(a).append(b).toString();
String d = "abc";
}
看string d,理解了吗?
同时看string c的拼接过程,先生成一个StringBuilder对象,再调用2次append方法,最后再返回一个String对象,知道String比StringBuilder慢的原因了吧
欢迎关注
参考博客