***SCJP的一道题(NO.1)***

icy_csdn 2002-06-10 06:48:30
public class Foo{
public static void main(String[] args){
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a,b);
System.out.println(a + "." + b);
}

static void operate(StringBuffer x, StringBuffer y){
x.append(y);
y = x;
}
}

What is the result?
A. The code compiles and prints "A.B".
B. The code compiles and prints "A.A".
C. The code compiles and prints "B.B".
D. The code compiles and prints "AB.B".
E. The code compiles and prints "AB.AB".

正确答案为D

问题是:
我怎么觉得应该是E,
因为当对象a与b传入operate时,执行x.append(y)后,x变为AB,也就是a也变为AB了此后把x赋给了y,当然y也是AB,那么b也应该变为AB(但正确答案的意思,好像没有发生变化)所以答案应为E呀?

不明白,请解释一下,谢谢!
...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
icy_csdn 2002-06-10
  • 打赏
  • 举报
回复
一拍脑袋,原来是这么回事,谢谢两位!
:)
scriptskychen 2002-06-10
  • 打赏
  • 举报
回复
应该选d
这是stringbuffer方法决定的,你看看一般的参考书就知道了
hccpro 2002-06-10
  • 打赏
  • 举报
回复
operate()方法中:

x引用a,调用StringBuffer的方法:append()后,会改变a的状态;

y引用b,把y再引用到x,并不会改动b引用的对象的状态。

所以选D

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧