溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java的call by value和call by reference有什么區(qū)別

發(fā)布時間:2021-08-26 15:27:39 來源:億速云 閱讀:140 作者:chen 欄目:編程語言

這篇文章主要講解了“Java的call by value和call by reference有什么區(qū)別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java的call by value和call by reference有什么區(qū)別”吧!

Java傳參的兩種方式

  • call by value(值傳遞):傳遞的是值(針對基本數據類型),如傳遞一個整型數值。實際上,按值傳遞在方法調用方法中,參數只是實際參數的一份拷貝。

  • call by reference(引用傳遞):傳遞的是對象的引用(針對對象),即傳遞的是對象的地址。實際上,引用按傳遞時候會產生一份新的引用拷貝,新舊兩份引用同時指向同一個地址。

代碼示例

public class TestJavaCallBy {

 

 // 測試值傳遞

 public static void testCallByValue(int value) {

  value *= 10;

 }

 

 // 測試引用傳遞

 public static void testCallByReference(StringBuilder sb) {

  sb.append(" - " + ZonedDateTime.now());

 }

 

 public static void main(String[] args) {

 

  // 測試值變量

  int param = 1;

  // 測試引用對象

  StringBuilder sb = new StringBuilder("666");

 

  // 測試

  System.out.println(param);

  testCallByValue(param);

  System.out.println(param);

 

  System.out.println(sb.toString());

  testCallByReference(sb);

  System.out.println(sb.toString());

 }

}

 

控制臺輸出結果

1

// 結果仍為1,因為參數傳遞的是實參的一份拷貝,對實參不造成影響

1 

 

666

// 傳遞的是引用的拷貝,新舊兩個引用指向同一個對象(地址),因此append操作是作用在該對象上

666 - 2019-03-16T01:25:57.933038500+08:00[Asia/Shanghai]

那么就能得出一下結論:

  • call by value不會改變實參的值

  • call by reference不能改變實參的參考地址

  • call by reference能改變實參的內容

感謝各位的閱讀,以上就是“Java的call by value和call by reference有什么區(qū)別”的內容了,經過本文的學習后,相信大家對Java的call by value和call by reference有什么區(qū)別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI