標籤:資料 test oid 空間 方法調用 引用傳遞 new ber strong
1.基本類型和參考型別在記憶體中的儲存
(1)基本類型的變數儲存原始值,即它代表的值就是數值本身;
基本類型在聲明變數時就為它分配了空間;
基本類型在參數傳遞過程中屬於值傳遞,也就是複製一份資料到參數中。
(2)參考型別的變數儲存引用值;
("引用值"指向記憶體空間的地址,代表了某個對象的引用,而不是對象本身,對象本身存放在這個引用值所表示的地址的位置。)
參考型別在參數傳遞過程中資料引用傳遞,也就是將記憶體位址傳過去。
2.引用傳遞和值傳遞
(1)值傳遞:
方法調用時,實際參數把它的值傳遞給對應的形式參數,函數接收的是原始值的一個copy,此時記憶體中存在兩個相等的基本類型,即實際參數和形式參數,後面方法
中的操作都是對形參這個值的修改,不影響實際參數的值。
(2)引用傳遞:
也稱為傳地址。方法調用時,實際參數的引用(地址,而不是參數的值)被傳遞給方法中相對應的形式參數,函數接收的是原始值的記憶體位址;
在方法執行中,形參和實參內容相同,指向同一塊記憶體位址,方法執行中對引用的操作將會影響到實際對象。
1 public class Test { 2 public static void main(String[] args) { 3 Test t = new Test(); 4 int score = 59;//這裡傳遞的參數score就是按值傳遞 5 6 Numbertest nt = new Numbertest(); 7 nt.num = 59;//這裡傳遞的參數num就是引用傳遞 8 9 t.addNum(score);10 System.out.println("3:"+score);11 12 t.addNum(nt);13 System.out.println("4:"+nt.num);14 15 16 }17 18 public void addNum(int score) {19 score++; //1:6020 // score=score++; //1:5921 // score=score+1;22 System.out.println("1:"+score);23 }24 25 public void addNum(Numbertest nt) {26 nt.num++;27 System.out.println("2:"+nt.num);28 }29 30 }31 32 33 34 public class Numbertest {35 36 public int num;37 38 }
運行結果:
1:60
3:59
2:60
4:60
此代碼啟動並執行結果就是最好的一個例子;
在傳遞中也許還有更多的影響因素,隨著學習的深入就會發現。
Java——值傳遞與引用傳遞