結論測試
一、基本類型做爲參數傳遞時,是傳遞值的拷貝,不管你怎麼改變這個拷貝,原值是不會改變的this
二、對象做爲參數傳遞時,是把對象在內存中的地址拷貝了一份傳給了參數。spa
經過上面的兩段程序能夠得出以下結論:code
l 當調用方法時,若是傳入的數值爲基本數據類型(包含String類型),形式參數的改變對實際參數不影響對象
l 當調用方法時,若是傳入的數值爲引用數據類型(String類型除外),形式參數的改變對實際參數有影響blog
類:內存
1 class Car 2 { 3 //屬性 4 String pinpai; 5 String type; 6 double pailiang; 7 }
測試:class
1 class TestCar 2 { 3 public static void main(String[] args) 4 { 5 Car car=new Car(); 6 car.pinpai="牧馬人"; 7 car.pailiang=800; 8 car.type="7座"; 9 System.out.println("車的品牌爲"+car.pinpai); 10 System.out.println("車的排量爲"+car.pailiang); 11 System.out.println("車的類型爲"+car.type); 12 } 13 }
結果:變量
基本類型的參數傳遞:數據類型
1 1 public class ParamTransfer { 2 2 public int money; 3 3 4 4 public void amethod(int i) { 5 5 System.out.println("方法獲得的i的值:" + i); 6 6 i = i * 5; 7 7 System.out.println("方法執行語句i=i*5後i的值:" + i); 8 8 System.out.println("money的值:" + this.money); 9 9 } 10 10 11 11 public static void main(String[] args) { 12 12 ParamTransfer pt = new ParamTransfer(); 13 13 pt.money = 100; 14 14 pt.amethod(pt.money); 15 15 } 16 16 17 17 }
1 運行結果以下: 2 方法獲得的i的值:100 3 方法執行語句i=i*5後i的值:500 4 money的值:100
注意對比形參i和money值的變化。這裏咱們把pt.money做爲參數傳遞給amethod方法,該方法中i獲得的值是100,這個咱們從運行結果中可知。執行完i=i*5語句後咱們發現當前對象的money屬性值並無發生改變,這就說明這裏只是傳了一個100數值給形參i,至關於把pt.money的值拷貝給i,i的變化並不會影響pt.money的值,僅僅是傳數值。
2.引用類型的參數傳遞
1 1 class Time { 2 2 public int hour; 3 3 public int minute; 4 4 public int second; 5 5 } 6 6 7 7 public class ObjectParamTransfer { 8 8 Time time; 9 9 10 10 public static void main(String[] args) { 11 11 ObjectParamTransfer opt = new ObjectParamTransfer(); 12 12 opt.time = new Time(); 13 13 opt.time.hour = 11; 14 14 opt.time.minute = 22; 15 15 opt.time.second = 33; 16 16 17 17 System.out.println("time的屬性值:"); 18 18 System.out.println("hour=" + opt.time.hour); 19 19 System.out.println("minute=" + opt.time.minute); 20 20 System.out.println("second=" + opt.time.second); 21 21 22 22 opt.method(opt.time);//將對象引用做爲參數傳遞給方法method 23 23 //對比執行方法後的變化 24 24 System.out.println("執行方法後的time的屬性值"); 25 25 System.out.println("hour=" + opt.time.hour); 26 26 System.out.println("minute=" + opt.time.minute); 27 27 System.out.println("second=" + opt.time.second); 28 28 29 29 } 30 30 31 31 private void method(Time t) { 32 32 System.out.println("參數t的屬性值:"); 33 33 System.out.println("hour=" + t.hour); 34 34 System.out.println("minute=" + t.minute); 35 35 System.out.println("second=" + t.second); 36 36 System.out.println("對t和time進行==比較,結果爲:" + (t == this.time)); 37 37 38 38 System.out.println("改變t的實例變量值"); 39 39 t.hour = 44; 40 40 t.minute = 55; 41 41 t.second = 60; 42 42 } 43 43 }
1 運行結果以下: 2 time的屬性值: 3 hour=11 4 minute=22 5 second=33 6 參數t的屬性值: 7 hour=11 8 minute=22 9 second=33 10 對t和time進行==比較,結果爲:true 11 改變t的實例變量值 12 執行方法後的time的屬性值: 13 hour=44 14 minute=55 15 second=60