JavaRush /Java Blog /Random-TW /Java中傳遞參數
vincent_vega
等級 24
Gainesville

Java中傳遞參數

在 Random-TW 群組發布
Java 中的變數是一個包含值的容器。那麼「傳遞」變數是什麼意思呢?原始資料型別和引用資料型別有什麼差別。
Java 中傳遞參數 - 1
我們稍後會討論這個問題。我們先從一個簡單的作業開始。這段程式碼的作用:
int х = 3;
int у = х;
在第 1 行,建立了一個 int 類型的變數x並指派了值 3。在第 2 行,建立了一個 int 型別的變數y並指派了變數x的值。將來,變數x不會以任何方式影響yJava 複製x (3)的值並將其放入y中。這是按值傳遞參數。您不會將一個變數寫入另一個變數。該值被複製並指派給新變數。表達式y = x; 並不意味著「將x寫入y」。它的意思是「複製x中的值並將該副本寫入y」。如果以後我改y
у = 34;
這樣會影響x嗎?當然不是。x 的值仍然是 3。如果我稍後更改x
х = 90;
這將如何影響y?決不。分配後(複製值),它們不以任何方式相關。 那麼引用型呢?它們如何運作? 沒那麼難,其實規則是一樣的。連結做同樣的事情——你會得到連結的副本。所以如果我說:
Cat A = new Cat ();
Cat B = A;
連結A被複製到連結B。這不適用於該物件 - 您仍然只有一個物件。但現在您有兩個不同的引用控制同一個Cat物件。 現在讓我們看看如何將參數傳遞給方法。 Java 按值傳遞參數。總是。 這意味著“複製值並傳遞副本”。對於原始類型來說很簡單:
int х = 5;
doStuff (х); / / Передать копию х (meaning 5) в метод doStuff
doStuff 方法如下所示:
void doStuff (int у) {

   / / Действия с 'y'
}
x 值的副本(即 5)傳遞給doStuff()方法。doStuff()方法有自己的變量,稱為yy變數是一個新的、不同的變數。將x傳遞給方法時的內容的副本。從現在起,yx不再互相影響。當您更改y時,不會影響x
void doStuff (int у) {

   у = 27; / / Это не влияет на 'х'
}
反之亦然 - 如果您更改x,您將不會更改y在這種情況下x所做的唯一事情就是複製它的值並將其傳遞給doStuff()方法。 “按值傳遞”如何與引用一起使用? 太多人說,「Java 按值傳遞基本類型,按引用傳遞物件」​​。這不是他們說的。Java 按值傳遞一切。使用原語,您可以獲得內容的副本。透過鏈接,您還可以獲得內容的副本。但連結的內容是什麼?遙控。用於管理/存取該設施的設施。當您將對物件的參考傳遞給方法時,您正在傳遞該引用的副本。遠端控制克隆。該物件仍然位於創建它的堆中,等待有人使用遙控器。該設施並不關心有多少遙控器被「編程」來控制它。唯一關心這個的人是垃圾收集器和你,程式設計師。所以當你說:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   / / Использование B
}
只有一個Cat對象。但現在兩個遠端控制(連結)可以存取同一個Cat物件。所以現在無論BCat物件做什麼都會影響A指向的Cat,但不會影響A的內容!您可以使用新連結B(直接從A複製)更改Cat ,但不能更改A。這到底是什麼意思?您可以更改A引用的對象,但無法更改A 的引用- 將其重定向到另一個對像或null因此,如果您更改B的引用(不是B引用的實際Cat對象,而是引用本身的值),您將不會更改A的值。反之亦然。所以:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   B = new Cat (); / / Не повлияет на ссылку A
}
它只是意味著B指向另一個物件。小A還是很高興的。請跟我重複一遍: Java 按值傳遞所有內容。 (好吧,再來一次…帶著感覺。) Java 按值傳遞一切。 對於基本類型,您傳遞目前值的副本,對於物件引用,您傳遞引用的副本(遠端控制)。你永遠不會傳遞這個物體。所有物件都儲存在堆上。總是。現在煮一大杯咖啡並編寫一些程式碼! 來源文章。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION