Java 缺乏引用傳遞及其對交換原語的影響
在Java 中,向方法傳遞參數是透過值來完成的,這意味著對方法內參數所做的任何更改都不會反映在呼叫者的變數中。這在嘗試交換兩個基元的值時帶來了挑戰。
嘗試透過值傳遞來交換基元
考慮Java 中的以下交換函數:
<code class="java">void swap(int a, int b) { int temp = a; a = b; b = temp; }</code>
此函數嘗試透過建立臨時變數並手動調整數值來交換兩個整數的值。然而,在呼叫此函數後,由於 Java 的按值傳遞語義,原始值保持不變。
克服限制
要解決此限制,可以使用利用 Java 參數傳遞方法的技術。透過在 swap 函數中使用多個賦值,可以有效地實現交換:
<code class="java">int swap(int a, int b) { return a; } // Usage: y = swap(x, x = y);</code>
在此修改版本中,swap 函數將 a 賦值給 b,然後傳回 a。然後,呼叫者可以將傳回值指派給y 並交換x 和y 的實際值:
<code class="java">y = swap(x, x = y);</code>
多個物件的通用交換
此技術可以是泛化為支援相同類型的多個物件的交換:
<code class="java"><T> T swap(T... args) { return args[0]; } // Usage: z = swap(a, a = b, b = c, ... y = z);</code>
透過依賴賦值和參數傳遞的順序執行,可以有效地在Java 中交換對象,為缺乏「透過引用傳遞」功能。
以上是可以在 Java 中交換原始值而不透過參考傳遞嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!