调用方法并引用数组

时间:2018-04-10 03:42:42

标签: java

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。 我认为在这种情况下将更改原始数组。

任何人都可以帮我理解这个吗?

谢谢!

6 个答案:

答案 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打印它。