1.基本資料型別的資料儲存在棧中;
2.除基本資料型別外的資料型別(就是引用型別)的資料儲存在堆中,引用型別的資料都會分配乙個位址儲存在棧中。
3.用system.out.println();語句輸出的資料是棧中儲存的資料。
例1:
int a =10;
//int 是基本資料型別
system.out.
println
(a);
結果:
10
int是基本資料型別,當a被賦值10時,10被存入了棧中。輸出時輸出棧中的內容,也就是10.
例2:
int a=10;
int b = a;
system.out.
println
(b);
結果:
10
給a賦值時,10存入了棧中,將a的值傳遞給b時,其實是將a的值複製一下貼上到b在棧中的儲存空間中了,並沒有改變a的值。
例3:
int ages =
;//陣列是引用型別。
system.out.
println
(ages)
;
結果:
[i@52e922
陣列的資料儲存在堆中,棧中儲存的是資料的位址,所以例3輸出的結果是位址。
結果:
100
100
賦值其實是將棧中的資料複製貼上。輸出時也只輸出棧中的資料。基本資料型別只在棧中搞事情,堆中不開闢空間。
例4:
int c =
;int d =
newint[2
];d=c;
system.out.
println
(d);
system.out.
println
(d[0])
;
結果:
[i@52e922
100
100和200存入了堆中。這是把陣列c的棧中的位址複製到了陣列d的棧中,使陣列c和d指向同乙個堆。
100和200存入了堆中。這是把陣列c的棧中的位址複製到了陣列d的棧中,使陣列c和d指向同乙個堆。
例5:
public
static
void
main
(string[
] args)
; system.out.
println
(c[0])
;//輸出:100
test
(c);
system.out.
println
(c[0])
;//輸出:0
}public
static
void
test
(int array )
結果:
位址傳遞後陣列c和陣列array的位址相同,都指向堆中的同乙個記憶體空間,所以array[0]=0;改變了堆中的資料,影響了陣列c的值。
從棧和堆中來看值傳遞和引用傳遞
棧是乙個記憶體陣列,是乙個lifo last in first out,後進先出 的資料結構。棧儲存幾種型別的資料 某些型別變數的值 程式當前的執行環境 傳遞給方法的引數。棧有如下幾個特徵 資料只能從棧的頂端插入和刪除。把資料放到棧頂稱為入棧 push 從棧頂刪除資料稱為出棧 pop 棧是在編譯期,...
值傳遞與位址傳遞的區別
1.考題一 程式 如下 void exchg1 int x,int y inttmp tmp x x y y tmp printf x d,y d n x,y void main inta 4,b 6 exchg1 a,b printf a d,b d n a,b 輸出的結果 x y a b 問下劃...
詳述值傳遞和位址傳遞
1.值傳遞 值傳遞可以簡單的理解為將實參的值傳遞給形參,之後即使修改了形參的值,實參的值還是不會改變。package yang public class yangyujie 執行結果 102.位址傳遞 位址傳遞,顧名思義傳遞的是位址,實參和形參指向同乙個位址,改變形參的值是可以改變實參的值的。pac...