值传递
指基本数据类型在方法中的传递
在方法中改变属于局部变量的改变
int n = 1;
plus(n);
System.out.println(n);
public void plus(int num){
num++;
System.out.print(num);
}
在值传递时,系统在栈内存声明临时变量int类型num,并把实参n的值"1"赋值给形参num,此方法整个执行中,操作的是变量num的值,最后输出num的值为:2
改变方法中此变量的值不会影响方法外值的结果,此方法运行结束后,临时变量被清除,输出n的结果依然为:1
引用传递
指引用数据类型在方法中的传递
传的是物理内存地址值
/**
*学生类
*/
public class Student {
String name;
}
/**
*测试类
*/
public class Test {
public static void main(String[] args) {
Student stu = new Student();
stu.name = "张三";
reName(stu);
System.out.println(stu.name);
}
public static void reName(Student stu) {
stu.name = "李四";
}
}
在引用传递时,实参传递的是对象stu的内存地址,内存地址存储在栈内存,指向的对象具体存放在堆内存中,所以reName()方法中的对象stu和main()方法中的对象stu在内存地址里共同指向堆内存中的对象具体;
那么,在reName()方法里对此对象的name属性的值进行更改后,虽然在方法结束后reName的stu对象被清除,但main()方法里stu对象内存地址指向的依然是一个堆内存中的对象具体,所以最后输出name的值为:“李四”