public class TestParameterTransfer {
String name;
public TestParameterTransfer(String name){
this.name=name;
}
public void Test01(TestParameterTransfer u){
u.name="李寻欢";
}
public void Test02(TestParameterTransfer u){
u= new TestParameterTransfer("李白");
}
public static void main(String[] args){
TestParameterTransfer u1= new TestParameterTransfer("李太白");
System.out.println(u1);
System.out.println(u1.name);
u1.Test01(u1);
System.out.println(u1);
System.out.println(u1.name);
u1.Test02(u1);
System.out.println(u1);
System.out.println(u1.name);
}
}
运行结果: TestParameterTransfer@15db9742 李太白 TestParameterTransfer@15db9742 李寻欢 TestParameterTransfer@15db9742 李寻欢
出现的疑问:Java中明确指出,方法中的所有参数都是值传递,但是为何会有类似于传了地址的情况呢?
解答:因为 首先在类里构造的(一般)方法本身是定义输入值为用类定义的对象 而调用的时候我们也根据输出结果进一步验证了对象名所对应的是一个由 TestParameterTransfer类定义的指针
形参u的地址与原参数u1不仅仅地址一样,而且类都一样,所以,形参改了,原参也改了(指向内存中的同一个对象)
然而Test02中我们又新建了一个对象,并且给他赋初值了,但是对象不同了,地址也有所区别了,所以这个初始值是给新建的对象了,对于原来的对象没有任何影响