gpt4 book ai didi

Java 引用与值(value)

转载 作者:行者123 更新时间:2023-12-02 02:08:31 25 4
gpt4 key购买 nike

新手问题。尝试了解 Java 中的引用参数与值参数,请考虑以下事项:

//Helper function int[] to csv    
public static String csv(int[] values){
String ret = "";
for(int i = 0; i < values.length; i++)
ret = String.format("%s%s%s",ret,i == 0 ? "" : ", ",values[i]);
return ret;
}

//Helper function, print to console
public static void print(int[] v){
System.out.println(csv(v));
}



public static void method1(int[] input){
input[0] = 3; input[1] = 4; input[2] = 5;
}

public static void method2(int[] input){
input = new int[]{6,7,8};
}

public static void main(String[] args) throws Exception {
int[] original = {0,1,2};
print(original);

method1(original);
print(original); //As expected

method2(original);
print(original); //Modification ignored
}

在上面,方法 1 中对数组的更改会被存储,但在方法 2 中,函数内部的新赋值不会影响原始数组,因此具有本地作用域。

那么,如果我需要对通过引用传递的数组执行数组大小调整操作怎么办?这在java中不可能吗?

最佳答案

Java中所有参数都是通过拷贝的方式传递的。问题是,复制什么?对于对象(包括数组),将复制对象引用。您现在有对同一对象的两个引用,因此可以修改该对象。

在方法2中,参数“input”最初设置为对数组的对象引用。然后修改“输入”以指向另一个数组。这对调用者没有影响。如果您单独保留“输入”并使用它来更改元素,那么您会在调用者中看到更改。

关于Java 引用与值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50379922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com