对于基本数据类型的参数,形参的改变不影响实参的值。
public class comDemo {
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;
}
}
运行时有栈内存和堆内存。
运行到main方法时,存储在栈内存中,方法:main() int number——100
输出“调用change方法前+number”,其中number为100.
再运行change方法,存储在栈内存中,方法:change() int number——100->200
change()调用完毕从栈内存消失。
形参不改变实参。
再输出“调用change方法后+number”,其中的number仍为100.
main方法调用完毕后也从栈内存消失。
对于引用类型的参数,形参的改变影响实参的值。
数组是引用类型的。
public class comDemo {
public static void main(String[] args) {
int[] arr = {10,20,30);
System.out.println("调用change方法前:" + arr[1]);
change(arr);
System.out.println("调用change方法后:" + arr[1]);
}
public static void change(int[] arr) {
arr[1] = 200;
}
}
运行到main方法时,栈内存中有方法:main() int[] arr——001.
001为数组arr的内存地址,存储于堆内存。
输出“调用change方法前+arr[1]”,其中arr[1]为20
再运行到change(arr)时,调用方法:change() int[] arr——001.
change()中,形参通过引用把arr[1]的值从20改为200
change()调用完毕从栈内存消失。
但形参影响了实参。
输出“调用change方法后+arr[1]”,其中arr[1]为200
main方法调用完毕后也从栈内存消失。
成员变量和局部变量区别