天天看點

java 方法傳參數_Java方法傳遞參數傳值還是傳址的問題

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);

}

}