java错题集之String(2)

来源:互联网 发布:bootstrap.js下载 编辑:程序博客网 时间:2024/05/20 08:22
以下输出结果为:

publicclass Test {
publicstatic void main(String[] args) {
    StringBuffer a = newStringBuffer("A"); 
    StringBuffer b = newStringBuffer("B"); 
    operator(a, b); 
    System.out.println(a + ","+ b); 
publicstatic void operator(StringBuffer x, StringBuffer y) { 
    x.append(y); y = x; 
}
}

答案:
AB,B
解析:
 StringBuffer a = newStringBuffer("A"); 
    StringBuffer b = newStringBuffer("B"); 
此时内存中的状态如下图所示:
 
publicstaticvoidoperator(StringBuffer x, StringBuffer y) { 
    x.append(y); y = x; 
}
进入如下方法后,内存中的状态为:
 
 x.append(y);
这句话比较关键,即,append为追加一个字符串在原字符串,并不是创建一个新的字符串对象保存下来。
这条语句执行后,内存的状态为:
 
 y = x; 
这条语句执行后,内存的状态为:
 
当operator方法执行完毕后内存中的状态为:因为方法执行完毕,局部变量消除。
 
有内存中的状态,可以知道最后的结果。
0 0
原创粉丝点击