簡體   English   中英

調用方法並引用數組

[英]Calling a method and reference to an array

public class midterm2 {
    static void methodOne(int[] a) {
        int[] b = new int[5];
        a=b;
        System.out.print(a.length);
        System.out.print(b.length);
    }
    public static void main(String[] args) {
        int[] a = new int[10];
        methodOne(a);
        System.out.print(a.length);

    }
}

答案是5510,我不明白為什么,因為我以為是555。在這種情況下,我認為原始數組將被更改。

誰能幫我理解這一點?

謝謝!

a=b; 語句將“ b”的引用分配給“ a”。

如果您的代碼類似於a = new int[10]; 它將輸出5510作為輸出。 因此,除非您使用“ new”,否則它將作為按值調用,並且在被調用方法中所做的更改將不會反映在調用方法中。

由於a是原始類型的數組,因此它是按值傳遞給methodOne() ,因此main方法范圍內的變量a保持不變。

將methodOne參數名稱更改為“ int [] c”將使您容易理解。 methodOne中的參數“ a”與主方法中的變量“ a”完全不同。

簡短的答案是:引用變量'a'對於函數'main'和'methodOne'是局部的。

在main()方法中,a []指向int [10]數組。 當您將int [10]數組傳遞給methodOne()時,新的a []變量將創建用於引用int [10]數組,並且該變量為a []。 現在,您有2個a []變量,它們引用int [10]數組。

現在,您創建b [],它引用了int [5]數組。 您將b []的數組分配給a [](屬於methodOne())。 但是main方法中的a []仍引用int [10]數組。

在您的方法中, methodOne() 'a'對於該方法而言是本地的。 所以當你做a = b

它不會對您的main()變量'a'進行任何更改。

然后再次在main()打印變量'a':因此,它引用局部變量a進行打印。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM