天天看點

Java常見面試題:什麼是值傳遞?許多人可能仍不清楚值傳遞的概念。盡管他們知道如何使用引用傳遞,但他們可能不了解其實際原

作者:程式員葉偉

Java常見面試題:什麼是值傳遞?

許多人可能仍不清楚值傳遞的概念。盡管他們知道如何使用引用傳遞,但他們可能不了解其實際原理。

值傳遞最常見的應用是在方法調用中傳遞數組。在子方法中修改數組時,原方法中的數組值也會相應地改變。這是引用傳遞的典型例子。

盡管數組被傳遞給子方法,但實際上傳遞的是數組的引用。引用就像電腦桌面上的快捷方式,實際上指向的是d盤中的某個資源。

舉例來說,在Java代碼中建立一個對象,例如Integer a = 1,在實際的JVM中會在堆記憶體中建立一個Integer對象,其值為1,并在堆棧中建立一個變量a。a實際上是一個引用,指向堆中的值為1的Integer對象。

如果此時又建立了一個Integer b,然後将a指派給b,則會在堆棧中建立另一個變量b,其值也指向堆中的 Integer 對象,與a相同。此時,如果對b進行修改,實際上修改的是堆中的值為1的對象,是以a也會随之改變。

對于其他基礎資料類型,如數組、集合、自定義類等,它們在變量指派時都屬于引用傳遞。變量儲存的隻是對象在堆記憶體中的位址,實際修改的對象隻有一個,即堆中的實際值,是以是引用傳遞。

值傳遞的概念很簡單,隻要記住一點,即對于所有基礎資料類型(如int、char、float、double)都是值傳遞。例如,在Java中,如果建立一個int類型的變量a=e,實際上a和e都存儲在堆棧中。這與之前的情況不同,它存儲在堆棧中,而不是在堆中。

如果将a複制到b中,則b等于a,此時實際上會重新建立一份副本,b的後續修改不會影響a,這是典型的值傳遞。需要特别注意的是,FB類型不屬于Java的基本資料類型,看起來像引用傳遞,但實際上是值傳遞。

如果檢視源代碼,就會發現它被Final修飾,也就是說它不能被修改。如果發生重新指派,則需要建立一個新的對象,這是根本原因。

好了,本期的視訊就是這些。如果您對本期的内容有任何疑問,請在評論區留言。謝謝大家。

Java常見面試題:什麼是值傳遞?許多人可能仍不清楚值傳遞的概念。盡管他們知道如何使用引用傳遞,但他們可能不了解其實際原
Java常見面試題:什麼是值傳遞?許多人可能仍不清楚值傳遞的概念。盡管他們知道如何使用引用傳遞,但他們可能不了解其實際原
Java常見面試題:什麼是值傳遞?許多人可能仍不清楚值傳遞的概念。盡管他們知道如何使用引用傳遞,但他們可能不了解其實際原
Java常見面試題:什麼是值傳遞?許多人可能仍不清楚值傳遞的概念。盡管他們知道如何使用引用傳遞,但他們可能不了解其實際原

繼續閱讀