java中main方法中声明的变量[重复]

Posted

技术标签:

【中文标题】java中main方法中声明的变量[重复]【英文标题】:declared variables in main method in java [duplicate] 【发布时间】:2019-02-26 20:50:43 【问题描述】:

这应该与范围有关,但我仍然不明白变量发生了什么。 为了练习,我在课堂上做了三个方法,其中包含一个主要方法。在 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 最后有相同的数组。 有人能解释一下这段代码是如何工作的吗?

【问题讨论】:

您应该阅读***.com/questions/12757841/… 以了解此代码为何如此工作。 对java中的概念有误解,Java总是按值传递。这些链接真的很有帮助!非常感谢。 【参考方案1】:

为避免发送原始对象数据的引用,您可以发送其克隆(复制)对象数据的引用。

    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;
//sorted and b would now point to the cloned data of arr1 and a respectively
int[] sorted = insertionSort(arr1.clone());
int[] b = changeValue(a.clone());
main.printq(arr1);
main.printq(sorted);
main.printq(a);
main.printq(b);

【讨论】:

谢谢!这对于理解将数组作为参数传递给方法的工作原理非常有帮助。我以为Java总是按值传递,所以我什至想不到参数可以是具有数组引用的值。

以上是关于java中main方法中声明的变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Main 方法中声明静态变量?

为啥 main() 在 java 中被声明为 public 和 static [重复]

在c ++中全局声明的动态数组的多个定义[重复]

从python空闲的main方法访问变量

JAVA里面的main函数为啥要定义为static的?

java中为啥要把main方法定义为一个static方法