Java學習之值傳遞(轉)
Java學習之值傳遞(轉)[@more@] 值傳遞是在一個函式中,呼叫另外一個函式,其中含有引數傳遞的情況。往往值傳遞就是把資料傳遞到另外一個函式中進行進一步處理,以更清楚地顯示函式的表達意思。在函式呼叫的時候會有資料傳遞,同樣要考慮形參和實參的問題,如下面的一個程式:
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的值,即使沒有最後的資料返回,這個資料也是會改變的。
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的值,即使沒有最後的資料返回,這個資料也是會改變的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-950914/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java值傳遞Java
- 深入學習js之——引數按值傳遞#9JS
- Java的值傳遞和引用傳遞Java
- Java只有值傳遞Java
- Java - 是值傳遞還是引用傳遞Java
- Java中的值傳遞和引用傳遞Java
- Flutter學習之Route跳轉及資料傳遞Flutter
- JavaScript之按值傳遞JavaScript
- 解惑4:java是值傳遞還是引用傳遞Java
- java方法中只有值傳遞,沒有引用傳遞Java
- QNX學習 -- API之訊息傳遞API
- AbilitySlice之間的傳遞值
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- 值傳遞與引用傳遞
- 值傳遞和引用傳遞
- Vue父子之間的值傳遞Vue
- Java 應用程式中的按值傳遞語義 (轉)Java
- Java引數傳遞是傳值還是傳引用?Java
- SpringMVC之學習(2)值得接收和傳遞SpringMVC
- Android學習之 Touch事件傳遞機制Android事件
- JavaScript深入之引數按值傳遞JavaScript
- JavaScript 深入之引數按值傳遞JavaScript
- 在兩個ASP.NET頁面之間傳遞值 (轉)ASP.NET
- 按值傳遞
- JavaScript的值傳遞和引用傳遞JavaScript
- 快速搞懂值傳遞與引用傳遞
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- Shell學習【引數傳遞】
- 為什麼說Java中只有值傳遞。Java
- go 值傳遞和地址傳遞的例子Go
- Day30--值傳遞和引用傳遞
- 面試官:兄弟,說說Java到底是值傳遞還是引用傳遞面試Java
- 這一次,徹底解決Java的值傳遞和引用傳遞Java
- C#引數傳遞之值引數C#
- javasript 按值傳遞Java
- 前端學習(2332):angular之元件傳值之父傳子前端Angular元件
- JAVA基礎之-引數傳遞Java
- jmeter學習指南之深入分析跨域傳遞cookieJMeter跨域Cookie