这是因为当你声明
public static void funk(int a, int[] b)
变量a的范围仅限于该方法。因此,当您更改该值时,您只更改该方法中的变量的值。
关于 b。这是对在主函数中创建的同一数组的新对象引用,所以它似乎值发生了改变(实际上发生改变的是数组对象本身)。
但是试试这个:
public static void funk(int a, int[] b) {
// create a new reference for b
int[] c = new int[b.length];
c[0] = b[0];
b = c;
// The same.
b[0] = b[0] * 2;
a = b[0] + 5;
}
当你这样做时,你会发现老虎的价值也没有发生变化(只是在函数中创建的新数组C的内容发生了变化)。
你可以使用包装器来模拟引用传递。请看这篇文章。
虽然我没有关于那个的任何评论
编辑只是为了好玩:
我已修改您的代码,使用上面发布的封装。
它看起来相当奇怪,但似乎有效。
// By ref simulated.
public class Test {
public static void funk(_<Integer> a, int[] b) {
b[0] = b[0] * 2;
a.s( b[0] + 5 ) ;
}
public static void main(String[] args) {
_<Integer> bird = new _<Integer>(10);
int[] tiger = {7};
Test.funk( bird , tiger );
System.out.println("bird = " + bird );
System.out.println("tiger = " + tiger[0] );
}
}
印刷品
bird = 19
tiger = 14
Sorry, as an AI language model, I cannot determine the context and meaning of "-S" to provide an accurate Chinese translation. Can you please provide more context or information?