document.write('
ABD
[解析] String字符串修改实现的原理如下:当使用String类型来对字符串进行修改时,其实现方法是首先创建一个StringBuffer,然后调用StringBufFer的
append方法,最后调用StringBuffer的toString方法把结果返回。举例如下:
String s="Hello";
s+="World";
以上代码与下述代码等价:
String s="Hello";
StringBuffer sb=new StringBuffer(s);
s.append("World");
s=sb.toString();
由此可以看出,上述过程比使用StringBuffer多了一些附加的操作,同时也生成了一些临时的对象,这样会导致程序的执行效率降低。
StringBuilder也是可以被修改的字符串,它与StringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的,如果只是在单线程中使用字符串
缓冲区,那么StringBuilder的效率会更高些。因此,在只有单线程访问的时候,可以使用StringBuilder,当有多个线程访问时,最好使用线程安全的
StringBuffer。因为StringBuffer必要时可以对这些方法进行同步,所以任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线
程进行的方法调用顺序一致。
在执行效率方面,StringBuilder最高,StringBuffer次之,String最低。鉴于这一情况,一般而言,如果要操作的数据量比较小,可以使用String类;如
果是在单线程下操作大量数据,优先使用StringBuilder类;如果是在多线程下操作大量数据,优先考虑StringBuffer类。
从以上分析可知,StringBuilder不是线程安全的。所以,选项A、选项B与选项D正确。
');