Java 代码未按预期工作;阵列倍频;参照

Java 代码未按预期工作;阵列倍频;参照,java,Java,我在处理堆栈时遇到了一个问题,我必须将数组加倍。我使用了这段代码,虽然它不起作用,但它应该起作用 class ArrayDouble { public static void main(String []args) { int arr[] = new int[10]; sizeChange(arr); for(int i=0;i<arr.length;i++) System.out.print(arr[i]+ " "); } public stati

我在处理堆栈时遇到了一个问题,我必须将数组加倍。我使用了这段代码,虽然它不起作用,但它应该起作用

class ArrayDouble
{
public static void main(String []args)
{
    int arr[] = new int[10];
    sizeChange(arr);
    for(int i=0;i<arr.length;i++)
        System.out.print(arr[i]+ " ");
}
public static void sizeChange(int arr[])
{
    arr[0]=1;
    arr = new int[2*arr.length];
    arr[1]=1;
}
}
类数组双
{
公共静态void main(字符串[]args)
{
int arr[]=新int[10];
sizeChange(arr);

for(int i=0;i数组在Java中不是一种基本类型,但它们也不是对象……”

在Java中,被调用的方法可以更新数组的内容,也可以更新数组引用的副本,但不能更新调用方中保存调用方数组引用的变量。因此,Java提供的不是按引用传递

与所有Java对象一样,数组也是按值传递的……但值是对数组的引用。因此,当您在被调用方法中为数组的某个单元格赋值时,您将赋值给调用方看到的同一个数组对象

这不是按引用传递。实按引用传递涉及传递变量的地址。使用实按引用传递,被调用的方法可以分配给其局部变量,这会导致调用方中的变量被更新

详细解释:
数组实际上是对象,因此会传递引用(引用本身是通过值传递的,还不清楚吗?)。快速示例:

// assuming you allocated the list
public void addItem(Integer[] list, int item) {
    list[1] = item;
}
您将看到调用代码对列表的更改。但是,您不能更改引用本身,因为它是按值传递的:

// assuming you allocated the list
public void changeArray(Integer[] list) {
    list = null;
}

如果您传递一个非空列表,则在方法返回时它将不会为空。

因为Java传递了引用的副本。因此,将新实例分配给方法内的参数不会反映在方法外。而是返回一个数组:
public static int arr[]sizeChange(int arr[]){arr[0]=1;arr=new int[2*arr.length];arr[1]=1;返回arr;}
好的,那么这里没有实际的按引用传递吗?而且因为我显然更改了对象并创建了一个新对象,所以没有发生更改?是吗?Java不是按引用传递的。它按值传递,但值是对对象的引用。顺便说一句:您没有更改传递的数组(数组大小不可更改),您已经为参数分配了一个新数组。提示:有一个
java.util.Arrays
类,它有一些方法,如
copyOf()
,可用于调整数组大小(创建具有相同内容的新数组)