Re: [問題] 關於StringBuffer與區域變數
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):