4.2Java参数传值机制
在Java中,方法中所有参数都是"值传递",也就是"传递值的副本"
我们得到的是"原参数的复印件,而不是原件"。复印件不会影响原件
本章内容
基本数据类型参数的传递
引用类型参数的传递
基本数据类型参数的传递
传递的是值的副本,不会影响原件。
引用类型参数的传值
-
传递值得副本,引用类型指的是"对象的地址",副本和原参数都指向了同一个"地址"
-
改变"副本指向地址对象的值意味着原参数指向对象的值也发生了改变"---无论原件还是复印件指向对象的地址发送改变都可以使对象属性发生改变
实例:
/**
* 测试参数传值机制
* @author Lucifer
*/
public class UserNo4 {
int id;
String name;
String pwd;
//写一个方法
public UserNo4(int id, String name){
this.id = id;
this.name = name;
return;
}
//再写一个方法
public void testParameterTransfer01(UserNo4 u){
u.name = "JunkingBoy";
return;
}
//再写一个测试方法
//public void testParameterTransfer02(UserNo4 u){
//u = new UserNo4(19,"Harden");
//return;
//}
//main方法
public static void main(String[] args) {
UserNo4 u1 = new UserNo4(18,"Lucifer");
u1.testParameterTransfer01(u1);
System.out.println(u1.name);
//u1.testParameterTransfer02(u1);
//System.out.println(u1.name);
}
}
解析视图:
实例2:
/**
* 测试参数传值机制
* @author Lucifer
*/
public class UserNo4 {
int id;
String name;
String pwd;
//写一个方法
public UserNo4(int id, String name){
this.id = id;
this.name = name;
return;
}
//再写一个方法
public void testParameterTransfer01(UserNo4 u){
u.name = "JunkingBoy";
return;
}
//再写一个测试方法
public void testParameterTransfer02(UserNo4 u){
u = new UserNo4(19,"Harden");
return;
}
//main方法
public static void main(String[] args) {
UserNo4 u1 = new UserNo4(18,"Lucifer");
u1.testParameterTransfer01(u1);
System.out.println(u1.name);
u1.testParameterTransfer02(u1);
System.out.println(u1.name);
}
}
解析视图2:
特点概括
特点:
-
传递的是值、变量的地址而不是变量的本身。
-
多个变量指向一个值是指通过上一题的创建对象传入u1开始两个对象的地址一致。
-
方法完成后即关闭,回到内存分析一讲中。这时候在建新对象就会指向另一个对象的地址