Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”;也就是说,我们得到的是“原参数的复印件”,因此复印件改变不会影响原件。
基本数据类型参数的传值
- 传递的是值的副本,副本改变不会影响原件。
引用类型参数的传值
- 传递的是值的副本,但是引用类型指的是“对象的地址”,因此改变“副本不指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。
多个变量指向同一个对象
package User4;
public class User4 {
int id;
String name;
String pwd;
public User4(int id,String name) {//带参构造初始化
this.id=id;
this.name=name;
}
public void testParameterTransfer01(User4 u) {//普通方法
u.name="李四";
}
public void testParameterTransfer02(User4 u) {//普通方法
u=new User4(200, "王五");//有new就产生新的对象
}
public static void main(String[] args) {
User4 u4 = new User4(100, "张三");
//将u4的地址传了过去,导致01中的u也指向原对象,因此可以改变原对象的属性
u4.testParameterTransfer01(u4);
System.out.println(u4.name);
//由于产生了新对象,则两个引用指向的是不同对象也就是不同空间,因此不会改变原对象的属性
u4.testParameterTransfer02(u4);
System.out.println(u4.name);
}
}