Void函数返回更改的数组,但不是更改的整数?

时间:2015-12-10 22:23:39

标签: java arrays

{
int[] n = new int[4];
n[0]=1;
n[1]=3;
n[2]=4;
n[3]=5;
for(int i=0; i<4; i++)
{
    System.out.print(n[i]+ " ");
}

menjava(n);
System.out.println();
for(int i =0;i<4;i++)
{
    System.out.print(n[i]+ " ");
}

}
public static void menjava(int[] a)
{
    a[0]=1*10;
    a[1]=3*10;
    a[2]=4*10;
    a[3]=5*10;
}
}        

http://imgur.com/0CNqY9A //控制台中的结果

{   
int n = 1;
System.out.println(n);

menjava(n);

System.out.println(n);
}
public static void menjava(int st)
{
    st = 4;
}
}    

http://imgur.com/dAqzuez //控制台中的结果

那么为什么返回数组,但整数保持不变(我认为应该是这样)。我无法找到有关数组在void函数中返回的原因。

2 个答案:

答案 0 :(得分:0)

不返回或更改数组的引用

引用的数组已更改。

int[] n = new int[4];

在此代码中,n是数组的引用,并且在将其传递给方法时会复制此引用。此参考不会更改。

答案 1 :(得分:0)

这里的问题是Java是一种值传递语言。这意味着在您的情况下,您提供的方法menjava可能是一个临时数组,其中包含与原始数组n相同的值。因此,当这个数组传递给menjava时,它会进行计算,但是对于你的主要方法不知道的临时数组。

这里最简单的解决方法是让你的menjava方法返回它所处理的数组,并在调用函数中将数组设置为该值:

public static int[] menjava(int[] a){

    //changes to array a

    return a;

}

然后在你的调用函数中:

{
    //your other code
    n = menjava(n);
    //the rest of your code
}