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。 我认为在这种情况下将更改原始数组。
任何人都可以帮我理解这个吗?
谢谢!
答案 0 :(得分:1)
a=b;
语句指定" b"到" a"。
如果您编码为a = new int[10];
,则会输出5510作为输出。所以除非你使用" new"它将作为值调用,并且在被调用方法中所做的更改将不会反映在调用方法中。
答案 1 :(得分:1)
由于a
是一个原始类型的数组,因此它是methodOne()
的值传递,因此main方法范围内的变量a
保持不变。
答案 2 :(得分:1)
将methodOne参数名改为" int [] c"会让你轻松理解。参数" a"在methodOne中,变量" a"完全不同。在主要方法。
答案 3 :(得分:1)
简短的回答是:引用变量'a'是函数'main'和'methodOne'的局部变量。
答案 4 :(得分:1)
在main()方法中,[]引用int [10]数组。当你将int [10]数组传递给methodOne()时,new a []变量为refer int [10]数组创建,该变量是[]。现在你有2个[]变量引用int [10]数组。
现在你创建b []并且它引用int [5]数组。您将b []的数组分配给[](属于methodOne())。但是main方法中的[]仍然引用int [10]数组。
答案 5 :(得分:1)
在您的:methodOne()
'a'是该方法的本地。
所以当你a = b
时,
它不会对main()
中的变量'a'进行任何更改。
然后再次打算在main()
中打印变量'a':
所以它指的是局部变量a打印它。