首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 方法呼叫前後變數值變化分析:參數傳遞與陣列修改

     編輯:程式設計綜合問答

給定以下 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();
    }
}

執行流程詳解

  1. 呼叫前: s="Hello"、num=6、array=[1,2,3,4]。
  2. 進入 foo: Java 採用值傳遞。x 複製 s 的參考,number 複製 num 的值,array 複製陣列參考(指向同一堆陣列)。
  3. 修改 number: number = array.length = 4,僅影響區域變數 number,num 不變。
  4. 修改 x: x = "HelloxAtfoo",字串不可變,產生新物件,s 仍指向 "Hello"。
  5. 迴圈修改陣列: x.length() = 11,陣列每個元素加 11:array 變為 [12,13,14,15]。因陣列為參考傳遞,原陣列被修改。
  6. 再次修改 x: x = "HelloxAtfooSuccess",長度 18,返回 18。

呼叫後的值

  • s:"Hello"(未變)
  • num:6(未變)
  • array:[12, 13, 14, 15](已修改)
  • result:18

關鍵點:基本型別傳值,參考型別傳參考的值。陣列元素修改會反映到原陣列,但重新指派參考(如 array = new int[5])則不會影響外部。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved