Java 參數(shù)傳遞

2018-01-18 14:56 更新

Java面向?qū)ο笤O(shè)計(jì) - Java參數(shù)傳遞


Java支持兩種數(shù)據(jù)類(lèi)型:基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型。

原始數(shù)據(jù)類(lèi)型是一個(gè)簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),它只有一個(gè)與之相關(guān)的值。引用數(shù)據(jù)類(lèi)型是一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),它表示一個(gè)對(duì)象。

原始數(shù)據(jù)類(lèi)型的變量將該值直接存儲(chǔ)在其存儲(chǔ)器地址處。

使用對(duì)象和引用變量時(shí),事情會(huì)有所不同。

Java中的所有參數(shù)都通過(guò)值傳遞。

當(dāng)參數(shù)是原始數(shù)據(jù)類(lèi)型時(shí),實(shí)際參數(shù)的值將復(fù)制到參數(shù)中。

對(duì)方法主體中的參數(shù)值進(jìn)行的任何更改只會(huì)更改形式參數(shù)的副本,而不會(huì)更改實(shí)際參數(shù)的值。

當(dāng)參數(shù)通過(guò)參考值傳遞時(shí),存儲(chǔ)在實(shí)際參數(shù)中的參考被復(fù)制到形式參數(shù)。實(shí)際參數(shù)和形式參數(shù)都指向內(nèi)存中的相同對(duì)象。

您可以將另一個(gè)對(duì)象的引用分配給方法主體中的形式參數(shù)。

例子

下面的代碼演示了Java中的引用傳遞機(jī)制。

class Phone {
  public String model = "Unknown";
  public int year = 2014;
  public double price = 0.0;
}

public class Main {
  public static void main(String[] args) {
    Phone myPhone = new Phone();

    myPhone.model = "iPhone";
    myPhone.year = 2009;
    myPhone.price = 16000.0;

    System.out.println("#1: model  = " + myPhone.model + ", year   = "
        + myPhone.year + ", price = " + myPhone.price);

    Main.test(myPhone);

    System.out.println("#4: model  = " + myPhone.model + ", year   = "
        + myPhone.year + ", price = " + myPhone.price);
  }

  public static void test(Phone xPhone) {
    System.out.println("#2: model  = " + xPhone.model + ", year   = "
        + xPhone.year + ",  price = " + xPhone.price);

    // Let"s make xyCar refer to a new object
    xPhone = new Phone();

    System.out.println("#3: model  = " + xPhone.model + ", year   = "
        + xPhone.year + ", price = " + xPhone.price);
  }
}

上面的代碼生成以下結(jié)果。

注意

當(dāng)引用類(lèi)型參數(shù)傳遞給方法時(shí),形式參數(shù)可以訪問(wèn)對(duì)象,實(shí)際參數(shù)可以訪問(wèn)該對(duì)象。

形式參數(shù)可以通過(guò)直接更改實(shí)例變量的值或通過(guò)調(diào)用對(duì)象上的方法來(lái)修改對(duì)象。

通過(guò)形式參數(shù)對(duì)對(duì)象進(jìn)行的任何修改都可以通過(guò)實(shí)際參數(shù)立即可見(jiàn),因?yàn)樗鼈兌急4鎸?duì)內(nèi)存中同一對(duì)象的引用。

形式參數(shù)本身可以被修改以引用方法內(nèi)的另一個(gè)對(duì)象。

要禁用將引用類(lèi)型形式參數(shù)更改為引用不同對(duì)象的方法,請(qǐng)?jiān)谝妙?lèi)型形式參數(shù)聲明中使用關(guān)鍵字final

public class Main {
  public static void main(String[] args) {
    Phone myPhone = new Phone();

    myPhone.model = "iPhone";
    myPhone.year = 2009;
    myPhone.price = 16000.0;

    Main.test(myPhone);
  }

  public static void test(final Phone xPhone) {
    System.out.println("#2: model  = " + xPhone.model + ", year   = "
        + xPhone.year + ",  price = " + xPhone.price);

    // Let"s make xyCar refer to a new object
    //xPhone = new Phone();
  }
}
class Phone {
  public String model = "Unknown";
  public int year = 2014;
  public double price = 0.0;
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)