本篇文章為大家帶來了關於java的相關知識,其中主要介紹了關於java到底是值傳遞該是引用傳遞的相關問題,下面一起來看一下,希望對大家有幫助。
推薦學習:《java影片教學》
文章目的:驗證Java語言到底是值傳遞還是引用傳遞以及Java參數傳遞的實作原理.
問題引入:
先閱讀程式碼片段:
public static void main(String[] args){ Person p=new Person("张三"); f(p); System.out.println("实参:"+p);}public static void f(Person p){ p.name="李四"; System.out.println("形参:"+p);}
運行結果:
形參:Person{name=“李四”}
實參:Person{name=“李四”}
我們將一個物件變數傳遞到方法中,然後在方法內修改對象的屬性,打印實參和形參,從表面上看,實參形參的值都被修改了.難道Java也支持引用傳遞嗎?
答案是:Java語言只支援值傳遞,不支援參考傳遞. |
#在驗證Java參數傳遞方式之前,我們先要明白函數值傳遞和引用傳遞的區別.
- 值傳遞(pass by value)是指在調用函數時將實際參數複製一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響實際參數。
- 引用傳遞(pass by reference)是指在呼叫函數時將實際參數的位址直接傳遞到函數中,那麼在函數中對參數所進行的修改,將會影響到實際參數。
可以看出值傳遞和引用傳遞的差異在於對形參的修改會不會影響到實參
1.基本資料型別的參數傳遞
我們將一個基本資料型別傳遞到方法中,然後在方法中修改形參的值,發現形參的修改並沒有影響實參.
public static void main(String[] args){ int a=1; f(p); System.out.println("实参:"+a);}public static void f(int a){ a=2; System.out.println("形参:"+a);}
2.引用資料型別的參數傳遞
在問題引入的例子中,看似形參的修改影響到了實參,但是只要我們創建一個新對象,並賦值給形參,此時再印出實參與形參,兩者互不影響.說明Java並不符合引用傳遞.
public static void main(String[] args){ Person p=new Person("张三"); f(p); System.out.println("实参:"+p);}public static void f(Person p){ p=new Person("李四"); System.out.println("形参:"+p);}
#3.原理
我們要明白為什麼會發生這些現象,就要理解Java背後的基本原理:
JVM劃分了很多塊區域,我們創建的對象就放在堆中,而基本數據類型和局部變量都放在棧中.當傳遞基本資料型別時,是將資料建立了一個副本傳遞到方法中,所以實參不會受到形參修改的影響,如圖:
由於物件是放在堆區的,所以我們只能使用物件的參考來操作這個物件.
當物件參考傳遞給方法時,其實是創建了一個引用副本,同時指向同一個物件,透過形參引用操作物件時,就好像實參發生了變化,其實對象內容改變了,但是對象變量沒有改變,實參本身是沒有改變的.因此引入問題中的例子就不難理解了.
當我們將形參重新賦值的時候,實參不會受到任何影響,此時,實參和形參已經指向了兩個不同的對象.
所以說,Java只支援值傳遞.
推薦學習:《java影片教學》
以上是一起來分析java是值傳遞還是引用傳遞的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載
最受歡迎的的開源編輯器