參數傳遞

一、基本類型做爲參數傳遞時,是傳遞值的拷貝,不管你怎麼改變這個拷貝,原值是不會改變的測試

 

二、對象做爲參數傳遞時,是把對象在內存中的地址拷貝了一份傳給了參數。this

 

1.1.1      參數傳遞圖解與結論

經過上面的兩段程序能夠得出以下結論:spa

l  當調用方法時,若是傳入的數值爲基本數據類型(包含String類型),形式參數的改變對實際參數不影響code

l  當調用方法時,若是傳入的數值爲引用數據類型(String類型除外),形式參數的改變對實際參數有影響對象

 

類:blog

class  Car
{
    //屬性
    String pinpai;
    String type;
    double pailiang;
}

測試:內存

class TestCar 
{
    public static void main(String[] args) 
    {
        Car car=new Car();
        car.pinpai="牧馬人";
        car.pailiang=800;
        car.type="7座";
        System.out.println("車的品牌爲"+car.pinpai);
        System.out.println("車的排量爲"+car.pailiang);
        System.out.println("車的類型爲"+car.type);
    }
}

 結果:class

基本類型的參數傳遞:變量

1 public class ParamTransfer {
 2     public int money;
 3     
 4     public void amethod(int i) {
 5         System.out.println("方法獲得的i的值:" + i);
 6         i = i * 5;
 7         System.out.println("方法執行語句i=i*5後i的值:" + i);
 8         System.out.println("money的值:" + this.money);
 9     }
10 
11     public static void main(String[] args) {
12         ParamTransfer pt = new ParamTransfer();
13         pt.money = 100;
14         pt.amethod(pt.money);
15     }
16 
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 class Time {
 2     public int hour;
 3     public int minute;
 4     public int second;
 5 }
 6 
 7 public class ObjectParamTransfer {
 8     Time time;
 9 
10     public static void main(String[] args) {
11         ObjectParamTransfer opt = new ObjectParamTransfer();
12         opt.time = new Time();
13         opt.time.hour = 11;
14         opt.time.minute = 22;
15         opt.time.second = 33;
16 
17         System.out.println("time的屬性值:");
18         System.out.println("hour=" + opt.time.hour);
19         System.out.println("minute=" + opt.time.minute);
20         System.out.println("second=" + opt.time.second);
21 
22         opt.method(opt.time);//將對象引用做爲參數傳遞給方法method
23         //對比執行方法後的變化
24         System.out.println("執行方法後的time的屬性值");
25         System.out.println("hour=" + opt.time.hour);
26         System.out.println("minute=" + opt.time.minute);
27         System.out.println("second=" + opt.time.second);
28 
29     }
30 
31     private void method(Time t) {
32         System.out.println("參數t的屬性值:");
33         System.out.println("hour=" + t.hour);
34         System.out.println("minute=" + t.minute);
35         System.out.println("second=" + t.second);
36         System.out.println("對t和time進行==比較,結果爲:" + (t == this.time));
37 
38         System.out.println("改變t的實例變量值");
39         t.hour = 44;
40         t.minute = 55;
41         t.second = 60;
42     }
43 }

運行結果以下:time的屬性值:hour=11minute=22second=33參數t的屬性值:hour=11minute=22second=33對t和time進行==比較,結果爲:true改變t的實例變量值執行方法後的time的屬性值:hour=44minute=55second=60

相關文章
相關標籤/搜索