JAVA入门之方法的参数传递 注意事项

导读:本篇文章讲解 JAVA入门之方法的参数传递 注意事项,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

方法的参数传递(基本类型)

public class Transmit {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用change方法前:" + number);
        change(number);
        System.out.println("调用change方法后:" + number);
    }
    public static void change(int number){
        number = 200;
    }
}

执行结果

在这里插入图片描述
欸,怎么经过change这个方法之后,number的数值还是100??

下面我说一下原因
在这里插入图片描述
内存中有栈内存和堆内存

程序开始会把main方法加载进栈内存,number=100也会加载进栈内存

刚开始调用change方法的时候,会把change方法加载进栈内存,并且刚开始change方法的number也是100

在这里插入图片描述

经过change方法的代码语句number = 200后,change方法里面的number就会变成200

在这里插入图片描述

但是其中main方法number的数值还是100没变,执行完change方法之后,change方法就会在栈内存中消失,剩下mian方法,mian方法中的number=100,故调用change方法后再输出number的数值还是100

在这里插入图片描述

对于基本数据类型的参数,形式参数的改变,不影响实际参数的数值

方法的参数传递(引用类型)

那我们来看看下面的例子

public class ArrTransmit {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        System.out.println("调用方法前:" + arr[1]);
        change(arr);
        System.out.println("调用方法后:" + arr[1]);
    }
    public static void change(int[] arr){
        arr[1] = 200;
    }
}

执行结果

在这里插入图片描述

欸?前一个例子不会变,为什么到数值就会变了??

别急,听我慢慢道来

在这里插入图片描述
程序开始,加载main方法,把数组名和数组的首地址加载进栈内存, 数组的内容则是加载进堆内存

输出arr[1],则是先通过栈内存中的arr数组的首地址,索引到堆内存中数组的首个内存,然后找到arr[1]的数值并输出

在这里插入图片描述

到执行change方法的时候

把change方法加载进去,change方法中对应的arr数值则是main中的arr

在这里插入图片描述
arr[1] = 200

则是把堆内存中的arr[1]改成了200

在这里插入图片描述
所以当再次输出main方法中的arr[1]则会输出对应堆内存中的arr[1],这个arr[1]已经被修改成200,所以输出200

在这里插入图片描述

因此,总结
对于引用类型的参数,形式参数的改变,影响实际参数的数值

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95063.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!