[英]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.