java學習筆記3--參數的傳遞方式

java參數的傳遞方式有兩種:值傳遞和引用傳遞

值傳遞:(形式參數類型是基本數據類型):方法調用時,實際參數把它的值傳遞給對應的形式參數,形式參數只是用實際參數的值初始化自己的存儲單元內容,實參和形參是兩個不同的存儲單元,所以方法執行中形式參數值的改變不影響實際參數的值。

引用傳遞:(形式參數類型是引用數據類型參數):也稱爲傳地址。方法調用時,實際參數是對象(或數組),這時實際參數與形式參數指向同一個地址,在方法執行中,對形式參數的操作實際上就是對實際參數的操作,這個結果在方法結束後被保留了下來,所以方法執行中形式參數的改變將會影響實際參數。


補充:java中基本數據類型和引用數據類型



基本數據類型 大小 範圍 默認值
int(整形) 32 -2147483648~2147483648 0
long(長整形) 64 -9233372036854477808~9233372036854477808 0
float(浮點形) 32 -3.40292347E+38~3.40292347E+38 0.0f
double(雙精度) 64 -1.79769313486231570E+308~1.79769313486231570E+308 0.0d
short(短整型) 16 -32768~32768 0
boolean(布爾型) 1 true/false false
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
byte(字節型) 8 -128~127 0

引用數據類型:
類、接口類型、數組類型、枚舉類型、註解類型;

基本數據類型和引用數據類型的區別:

基本數據類型在被創建時,在棧上給其劃分一塊內存,將數值直接存儲在棧上;

引用數據類型在被創建時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,然後由棧上面的引用指向堆中對象的地址。

例如,有一個類Person,有屬性name,age,帶有參的構造方法,

Person p = new Person("Tom",20);

在內存中的具體創建過程是:

1.首先在棧內存中位其p分配一塊空間;

2.在堆內存中爲Person對象分配一塊空間,併爲其三個屬性設初值"",0;

3.根據類Person中對屬性的定義,爲該對象的兩個屬性進行賦值操作;

4.調用構造方法,爲兩個屬性賦值爲"Tom",20;(注意這個時候p與Person對象之間還沒有建立聯繫);

5.將Person對象在堆內存中的地址,賦值給棧中的p;通過句柄p可以找到堆中對象的具體信息。


基本數據類型 大小 範圍 默認值
int(整形) 32 -2147483648~2147483648 0
long(長整形) 64 -9233372036854477808~9233372036854477808 0
float(浮點形) 32 -3.40292347E+38~3.40292347E+38 0.0f
double(雙精度) 64 -1.79769313486231570E+308~1.79769313486231570E+308 0.0d
short(短整型) 16 -32768~32768 0
boolean(布爾型) 1 true/false false
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
byte(字節型) 8 -128~127 0

引用數據類型:
類、接口類型、數組類型、枚舉類型、註解類型;

基本數據類型和引用數據類型的區別:

基本數據類型在被創建時,在棧上給其劃分一塊內存,將數值直接存儲在棧上;

引用數據類型在被創建時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,然後由棧上面的引用指向堆中對象的地址。

例如,有一個類Person,有屬性name,age,帶有參的構造方法,

Person p = new Person("Tom",20);

在內存中的具體創建過程是:

1.首先在棧內存中位其p分配一塊空間;

2.在堆內存中爲Person對象分配一塊空間,併爲其三個屬性設初值"",0;

3.根據類Person中對屬性的定義,爲該對象的兩個屬性進行賦值操作;

4.調用構造方法,爲兩個屬性賦值爲"Tom",20;(注意這個時候p與Person對象之間還沒有建立聯繫);

5.將Person對象在堆內存中的地址,賦值給棧中的p;通過句柄p可以找到堆中對象的具體信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章