java中main方法中声明的变量

这应该与范围有关,但我仍然不明白变量发生了什么。


为了练习,我在课堂上制作了三个方法,其中包含一个主要方法。在 main 方法中,我声明了两个用于试验的变量:arr1 和 a。此外,我声明了两个变量来与原始变量(arr1 和 a)进行比较:sorted 和 b。

然后,我尝试使用我实现的 printq 方法打印数组,以查看前后之间的区别。


    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Main main = new Main();

    int[] arr1 = new int[]{29, 64, 73, 34, 20};

    int[] a = new int[]{2, 2, 2};

    int[] sorted = main.insertionSort(arr1);

    int[] b = main.changeValue(a);

    main.printq(arr1);

    main.printq(sorted);

    main.printq(a);

    main.printq(b);

}

^ 这是我尝试的主要方法。


    public int[] insertionSort(int[] arr) {

    int min, temp;

    for (int i = 0; i < arr.length - 1; i++) {

        min = i;

        for (int j = i + 1; j < arr.length; j++) {

            if (arr[j] < arr[min]) {

                min = j;

            }

        }

        temp = arr[i];

        arr[i] = arr[min];

        arr[min] = temp;

    }

    return arr;

}

public void printq(int[] a) {

    if (a == null) {

        System.out.println("[]");

    } else {

        String temp = "[";

        for (int i = 0; i < a.length - 1; i++) {

            temp = temp + a[i] + ", ";

        }

        temp = temp + a[a.length - 1] + "]";

        System.out.println(temp);

    }

}

public int[] changeValue(int[] c) {

    for (int i = 0; i < c.length; i++) {

        c[i] = i + 1;

    }

    return c;

}

这是我尝试过的方法。


main.printq(arr1) prints [20, 29, 34, 64, 73]. (supposed to be [29, 64, 73, 34, 20]) 

main.printq(sorted) prints [20, 29, 34, 64, 73] as well. (as I expected) 

main.printq(a) prints [1, 2, 3]. (supposed to be [2, 2, 2])

main.printq(b) prints [1, 2, 3]. (as I expected)

即使在 main 方法中声明的变量不是静态变量,这个例子表明一个似乎受到另一个的影响。


我试图理解与访问修饰符和范围有关的这一点,但我最终发布了这个,因为我仍然不明白为什么 int 数组 arr1 和 sorted 最后具有相同的数组。

有人可以解释一下这段代码是如何工作的吗?


狐的传说
浏览 228回答 1
1回答

慕码人2483693

为避免发送原始对象数据的引用,您可以发送其克隆(复制)对象数据的引用。&nbsp; &nbsp; public static void main(String[] args) {// TODO Auto-generated method stubMain main = new Main();int[] arr1 = new int[]{29, 64, 73, 34, 20};int[] a = new int[]{2, 2, 2};//sorted and b would now point to the cloned data of arr1 and a respectivelyint[] sorted = insertionSort(arr1.clone());int[] b = changeValue(a.clone());main.printq(arr1);main.printq(sorted);main.printq(a);main.printq(b);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java