給定以下 Java 程式碼片段,分析呼叫 foo(s, num, array) 前後,變數 s、num、array 的值變化。
public class FillTheGaps {
int foo(String x, int number, int[] array) {
number = array.length;
x = x + "xAtfoo";
for (int i = 0; i < number; i++) {
array[i] = array[i] + x.length();
}
x = x + "Success";
return x.length();
}
void bar() {
String s = new String("Hello");
int num = 6;
int[] array = {1, 2, 3, 4};
int result = 0;
result = foo(s, num, array);
}
public static void main(String[] args) {
FillTheGaps ftp = new FillTheGaps();
ftp.bar();
System.out.println();
}
}
s="Hello"、num=6、array=[1,2,3,4]。x 複製 s 的參考,number 複製 num 的值,array 複製陣列參考(指向同一堆陣列)。number = array.length = 4,僅影響區域變數 number,num 不變。x = "HelloxAtfoo",字串不可變,產生新物件,s 仍指向 "Hello"。x.length() = 11,陣列每個元素加 11:array 變為 [12,13,14,15]。因陣列為參考傳遞,原陣列被修改。x = "HelloxAtfooSuccess",長度 18,返回 18。s:"Hello"(未變)num:6(未變)array:[12, 13, 14, 15](已修改)result:18關鍵點:基本型別傳值,參考型別傳參考的值。陣列元素修改會反映到原陣列,但重新指派參考(如 array = new int[5])則不會影響外部。