程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中值傳遞詳解

Java中值傳遞詳解

編輯:關於JAVA

學習Java過程中參數傳遞中的值傳遞和引用傳遞總是讓人很迷惑,和大家分享一下值傳遞的原理,希望給初學者一些幫助。

  值傳遞是在一個函數中,調用另外一個函數,其中含有參數傳遞的情況。往往值傳遞就是把數據傳遞到另外一個函數中進行進一步處理,以更清楚地顯示函數的表達意思。在函數調用的時候會有數據傳遞,同樣要考慮形參和實參的問題,如下面的一個程序:

  public class PassTest

  {

  float ptValue;

  public void changeInt (int value)

  {

  value = 55;

  }

  public void changeStr (String value)

  {

  value = new String ("different");

  }

  public void changeObjValue (PassTest ref)

  {

  ref.ptValue = 99f;

  }

  public static void main (String args[])

  {

  String str;

  intval;

  PassTest pt = new PassTest ();

  val = 11;

  pt.changeInt (val);

  System.out.println ("Int value is: " + val);

  str = new String ("Hello");

  pt.changeStr (str);

  System.out.println ("Str value is: " + str);

  pt.ptValue = 101f;

  pt.changeObjValue (pt);

  System.out.println ("Current ptValue is: " + pt.ptValue);

  }

  }

  這個程序最後輸出的結果將是:

  11

  Hello

  99f

  開始的11和Hello就是遵循參數傳遞的原則,雖然改變了形參的值,但是實參卻不改變,這同C語言中是一樣的。那麼如果想改變函數中的實參的值,那麼應該怎麼做呢?我們知道,在C語言中,我們可以采用指針變量,用指針變量作為函數的參數,那麼這樣,傳遞的就是參數存放的地址,那麼在函數中改變同一地址的參數值的時候,就不會發生錯誤,可是,在java程序中沒有指針的說法,那麼,要實現上述C語言的做法,應該怎麼處理呢?我們知道,Java中處處都是考慮對象的,句柄是用來操作對象的活動的,那麼我們如果將對象的句柄傳遞到函數中去,就可以使兩者指向同一個句柄(也就是地址),這樣就可以完成數據的修改了。見上面的程序,我們可以知道,pt是主函數中創建的PassTest的對象,通過傳遞它,就可以完成地址的傳遞,子函數中,ref與主函數的pt指向的其實是一個內存單元,那麼修改ref中的ptValue的值,也就是修改pt中的ptValue的值,即使沒有最後的數據返回,這個數據也是會改變的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved