1. 程式人生 > >Java——值傳遞與引用傳遞

Java——值傳遞與引用傳遞

color 16px code mar 變量 參數傳遞 形參 函數 ava

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:60 20 // score=score++; //1:59 21 // 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——值傳遞與引用傳遞