作者H45 (!H45)
看板java
标题Re: [问题] 关於StringBuffer与区域变数
时间Fri Jun 16 09:51:05 2006
※ 引述《pieapple (社会新鲜人)》之铭言:
: Given:
: public class Foo
: {
: public static void main(String[] args)
: {
: StringBuffer a = new StringBuffer("A");
: StringBuffer b = new StringBuffer("B");
: operate(a,b);
^^^^^^^^^^^^^
b=operate(a,b);
: System.out.println(a + "," + b};
: }
: static void operate(StringBuffer x , StringBuffer y)
: {
: x.append(y);
: y=x;
^^^^
return x;
: }
: }
: 小弟执行後的结果是输出:AB,B
: 但我有些搞乱为什麽b的值是B,而不是AB。
: operate(a,b)之後,a会变成"AB",但b却还是"B"
: 请各位前辈赐教,谢谢!
修改之後
b=operate(a,b)
a会变成"AB",b也会变成"AB"了 (同一个位址)
区域变数(x,y)的改变并不能连带改变上一层变数(a,b)
也就是y=x; 不会连带造成b=a;
x.append(y)并没有改变区域变数(x,y)
而是改变x所指向的实体位址的成员栏位
所以这个函式呼叫没有问题
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.207.15