我有一个关于在Java中更改方法中的变量值的问题.
这是我的代码:
public class Test { public static void funk(int a, int[] b) { b[0] = b[0] * 2; a = b[0] + 5; } public static void main(String[] args) { int bird = 10; int[] tiger = {7}; Test.funk(bird, tiger); } }
执行该方法后Test.funk(bird, tiger)
,bird的值不会更改 - 它保留值10
,即使在funk()
方法中我们更改了值a = b[0] + 5;
另一方面,数组中元素的值会发生变化,因为我们有语句 b[0] = b[0] * 2;
我不明白为什么一件事改变而另一件事没改变?有人可以帮我解释一下.
看看Jon Skeet关于Java中参数传递的文章,它解释了这一点.
简而言之(请查看他的网站以获得更全面的解释):
数组是引用类型.如果传递指向数组的引用,则复制引用的值并将其分配给函数的参数.因此该参数将指向与传递的参数相同的数组.因此,通过函数参数对数组所做的更改将在调用函数中可见.但是,更改参数本身(b),例如通过将其设置为null,调用函数将不会注意到,因为参数(b)只是传递的参数(tiger)的副本.
整数是所谓的原始类型.传递整数会复制其值并将其分配给参数.但该值不是对实际数据的引用,而是数据本身.因此,对函数中参数的更改将影响参数(a),但不会影响调用函数(bird)中传递的参数.