我无法理解屏幕后面发生的内部工作,但我很困惑,因为它在控制台中打印的结果与预期的不同。有没有人可以解释我的问题?
public class Demo {
public int [] sort(int h[])
{
int temp;
for(int i=0;i<h.length;i++)
{
for (int j=i;j<h.length;j++)
{
if(h[i]>h[j])
{
temp=h[i];
h[i]=h[j];
h[j]=temp;
}
}
}
return h;
}
public static void main(String args[])
{
Demo obj =new Demo();
int a[]={9,2,3,5,32,1,5,3,7};
int[] sorted=obj.sort(a);
/*Code to Display Array a*/
for(int s :a)
{
System.out.print(s+ " ");
}
System.out.println("");
/*Code to Display Array sorted*/
for(int k:sorted)
{
System.out.print(k+" ");
}
}
/*
Expected output
9 2 3 5 32 1 5 3 7
1 2 3 3 5 5 7 9 32
Actual output
1 2 3 3 5 5 7 9 32
1 2 3 3 5 5 7 9 32
*/
}
答案 0 :(得分:0)
sort
方法正在处理通过call-by-reference传递给方法的实际输入参数(我知道这在措辞方面不是100%正确 - 请参阅here) 。也就是说,h
中数组sort
的所有更改也会在调用代码中显示。
如果您不想更改输入参数,则需要复制该对象。在您的情况下,您可以使用System.arrayCopy
来执行此操作。
答案 1 :(得分:0)
这是因为当您传递数组对象时,数组int [] h引用相同的内存位置。
将int [] a视为一个对象,它具有表示数组内存地址的字节。现在,当你传递这个数组时,相同的字节被复制到int [] h所以现在,h也指向相同的内存和因此,内存被修改。