更改方法Java中的变量值
这个问题在这里已经有了答案:
请看Jon Skeet关于Java中参数传递的文章,这解释了这一点。
总之(看他的网站更全面的解释):
数组是参考类型。 如果传递指向数组的引用,则会复制该引用的值并将其分配给该函数的参数。 所以参数将指向与传递的参数相同的数组。 因此,通过函数的参数对数组所做的更改将在调用函数中可见。 然而,改变参数本身(b),例如通过设置它为空,调用函数不会注意到,因为参数(b)只是传递的参数(tiger)的一个副本。
整数是所谓的基本类型。 传递整数复制其值并将其分配给参数。 但是这个价值并不是对实际数据的参考,而是数据本身。 因此,对函数中参数的更改将影响参数(a),但不会影响调用函数(bird)中传递的参数。
基本上,对象(如数组)通过“引用”传递给方法。 所以当你改变对象时,它会改变传入方法的同一个对象。
基元(比如int)是“按值传递”的,所以你在a中赋值的变量与传入的int变量不一样。
我希望这有帮助...
那是因为你申报的时候
public static void funk(int a, int[] b)
变量a的范围只是该方法。 然后,当您更改该值时,您只会更改该方法中该变量的值。
关于b。 这就是在main中创建的同一个数组的新对象引用,这就是为什么它的值看起来会发生改变(下面的数组对象正在改变)
但试试这个:
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;
}
当你这样做时,老虎的价值也不会改变(只有在funk中创建的新数组c的内容)
你可以使用包装器来模拟通过ref。 看到这篇文章。
虽然我对此没有任何评论
编辑只是为了好玩:
我修改了你的代码来使用上面发布的包装器。
它看起来很奇怪,但看起来像它的作品。
// 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
:-S
链接地址: http://www.djcxy.com/p/3513.html上一篇: Changing the values of variables in methods, Java
下一篇: java