当前位置:  开发笔记 > 编程语言 > 正文

更改方法中的变量值,Java

如何解决《更改方法中的变量值,Java》经验,为你挑选了1个好方法。

我有一个关于在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;

我不明白为什么一件事改变而另一件事没改变?有人可以帮我解释一下.



1> Johannes Sch..:

看看Jon Skeet关于Java中参数传递的文章,它解释了这一点.

简而言之(请查看他的网站以获得更全面的解释):

数组是引用类型.如果传递指向数组的引用,则复制引用的值并将其分配给函数的参数.因此该参数将指向与传递的参数相同的数组.因此,通过函数参数对数组所做的更改将在调用函数中可见.但是,更改参数本身(b),例如通过将其设置为null,调用函数将不会注意到,因为参数(b)只是传递的参数(tiger)的副本.

整数是所谓的原始类型.传递整数会复制其值并将其分配给参数.但该值不是对实际数据的引用,而是数据本身.因此,对函数中参数的更改将影响参数(a),但不会影响调用函数(bird)中传递的参数.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有