importdomain.User;
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);
}
}