方法的参数传递
方法的参数传递(基本类型)
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