java 方法传参数_Java方法传递参数传值还是传址的问题

importdomain.User;/***@authorcc

* java 方法执行时传参数是传值,然后拷贝一个副本,方法中修改的是拷贝的副本,并不是值本身

*

* 当参数是引用类型时,传的值是引用的值,不是对象的值。拷贝一份引用的副本,副本的值和原来的值相等

* 也就是说副本指向的对象和原值指向的是同一个对象*/

public classPassValueTest

{public static voidmain(String[] args)

{

PassValueTest p= newPassValueTest();final int i = 1;boolean b = true;

System.out.println("===测试int类型参数会拷贝副本后使用");

System.out.println("原来i=" +i);

p.changeI(i);

System.out.println("在调用changeI之后 i = " + i);//i的值没有被改变

System.out.println();

System.out.println("===测试boolean类型参数会拷贝副本后使用");

System.out.println("原来b=" +b);

p.changeB(b);

System.out.println("在调用changeB之后b = " +b);

System.out.println();

System.out.println("===测试引用类型参数传递的是引用的值并拷贝副本后使用 ");

User user= new User("dd", 28);

p.changeUser(user);

System.out.println("在调用ChangeUser方法之后user:" +user);

System.out.println();

System.out.println("===测试引用类型参数传到方法里面后是否会被先拷贝副本");

User userA= new User("userA", 10);

User userB= new User("userB", 12);

p.changeCopy(userA, userB);

System.out.println("在调用changeCopy方法之后,实际上userA和userB并没有改变:userA: " +userA+",userB:" + userB);//实际上userA 和userB的引用并没有被改变

System.out.println("如果在方法中没有拷贝参数而直接使用参数的话,userA和userB的引用应该会像在方法中被调换的");

}public int changeI(inti)

{

i= i+2;

System.out.println("在changeI方法中修改后i副本= " +i);returni;

}public boolean changeB(booleanb)

{

b= false;

System.out.println("在changeB方法中修改后b副本= " +b);returnb;

}public voidchangeUser(User user)

{

System.out.println("在changeUser方法中,user参数副本指向的对象和user参数指向的对象是同一个对象,修改前user:" +user);

user.setName("cici");

user.setAge(18);

System.out.println("在changeUser方法中,修改了参数副本所指向对象的值,修改后user:" +user);

}public voidchangeCopy(User userA,User userB)

{

System.out.println("在方法changeCopy中UserA和UserB的引用副本在修改前是 ,userA副本 :"

+ userA +", userB副本 : " +userB);

User temp= userA;//把A引用副本赋值给temp,就是说temp引用指向A对象

userA = userB;//把B引用副本赋值给A引用副本,就是说此时A引用副本指向B对象

userB = temp;//把temp引用赋值给B引用副本,就是说此时B引用副本指向A对象

System.out.println("在方法changeCopy中UserA和UserB的引用副本已经被调换 ,userA副本 :"

+ userA +", userB副本 : " +userB);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值