首頁  >  文章  >  Java  >  14.Java 基礎 - 參數傳遞

14.Java 基礎 - 參數傳遞

黄舟
黄舟原創
2017-02-27 10:55:091043瀏覽

基本概念

在Java 中,參數傳遞機制有兩種:傳值、傳址。

  • 基本型別作為參數傳遞時,是傳遞值的拷貝,無論你怎麼改變這個拷貝,原值是不會改變的;屬於傳值。

  • 物件作為參數傳遞,是把物件在記憶體中的位址拷貝了一份傳給了參數;屬於傳址。


實例探究

#1.基本類型作為參數傳遞

public static void main(String[] args) {    int n =3; // ①

    System.out.println(n); // 3

    chageData(n); // ②

    System.out.println(n); // 3}public static void chageData(int num){
        num = 10; // ③}

觀察輸出結果,發現n 的值並沒有改變。

因為 n,num 都是基本型,所以值就直接保存在變數中。

流程圖如下(對應程式碼中的①②③):

14.Java 基礎 - 參數傳遞


2.物件作為參數傳遞

14.Java 基礎 - 參數傳遞


14.Java 基礎 - 參數傳遞



############################################################################################################################ ###首先來看String 的例子:###
public static void main(String[] args) {
    String str = "hello"; // ①
    System.out.println(str); // hello

    chageData(str); //②

    System.out.println(str); // hello}public static void chageData(String s){
    s ="world"; // ③}
###觀察結果,發現str 並沒有改變。這裡結合流程圖來做下分析:############在① 執行完後,就會在堆中產生一個物件引用str,裡面存放的是位址索引,該位址指向記憶體中真正的String 物件############在② 產生了物件引用s ,透過傳址引用,它也得到了「hello」的位址索引。 ############在 ③ 對物件引用 s 重新賦值。照理說應該是物件的值從 “hello” -> “world”。但它卻創造了一個的新的對象,原因就在於 String 的不可變性,因為一旦 String 改變就建立新的物件。 ########################再來看StringBuffer 的例子:###
public static void main(String[] args) {
    StringBuffer stb = new StringBuffer("hello"); // ①
    System.out.println(stb); // hello

    chageData(stb); // ②

    System.out.println(stb); // hello world}public static void chageData(StringBuffer s){
    s.append("world"); // ③}
}
###觀察結果,發現stb 發生了改變,因為StringBuffer 物件是可變的,改變它的內容不會創造出新的物件############### 以上就是14.Java 基礎- 參數傳遞的內容,更多相關內容請關注PHP中文網(www.php.cn)! ################
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn