Menukar Primitif dalam Java: Menangani Had Lulus Mengikut Nilai
Di Java, di mana parameter diluluskan mengikut nilai, cuba menukar primitif nilai menggunakan pendekatan tradisional boleh menjadi sia-sia. Mari kita mendalami coretan kod yang menunjukkan perkara ini:
<code class="java">public class SwapPrimitives { public static void swap(int a, int b) { int temp = a; a = b; b = temp; } public static void main(String[] args) { int x = 5; int y = 10; swap(x, y); System.out.println("x: " + x); // Output: 5 System.out.println("y: " + y); // Output: 10 } }</code>
Niat kod ini adalah untuk menukar nilai x dan y, tetapi seperti yang anda boleh perhatikan daripada output, nilainya kekal tidak berubah. Ini kerana Java melepasi nilai, yang bermaksud bahawa salinan nilai primitif dicipta dan dihantar ke fungsi swap. Sebarang perubahan yang dibuat pada salinan ini dalam fungsi swap tidak mempunyai kesan ke atas pembolehubah asal.
Untuk mengatasi had ini dan mencapai pertukaran, kami boleh menggunakan teknik yang memanfaatkan kefungsian pengembalian kaedah Java. Dengan menambahkan pernyataan pulangan pada fungsi swap dan menetapkan semula hasilnya kepada pemanggil, secara tidak langsung kita boleh menukar nilai:
<code class="java">public static int swap(int a, int b) { // usage: y = swap(x, x=y); return a; } public static void main(String[] args) { int x = 5; int y = 10; y = swap(x, x = y); System.out.println("x: " + x); // Output: 10 System.out.println("y: " + y); // Output: 5 }</code>
Dalam kod yang diubah suai ini, fungsi swap mengembalikan nilai a. Walau bagaimanapun, tujuan utamanya adalah untuk membenarkan pemanggil menetapkan semula nilai yang dikembalikan kepada hujah pertama (dalam kes ini, x). Ini dengan berkesan mencapai pertukaran x dan y. Corak penggunaan untuk fungsi ini mungkin agak berlawanan dengan intuisi, tetapi ia menyediakan penyelesaian yang berdaya maju untuk menukar primitif dalam Java.
Jika anda inginkan pendekatan yang lebih generik, anda boleh mencipta kaedah yang boleh menukar sebarang bilangan objek daripada jenis yang sama:
<code class="java">public static <T> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z); return args[0]; } public static void main(String[] args) { int x = 5; int y = 10; int z = 15; z = swap(x, x = y, y = z); System.out.println("x: " + x); // Output: 15 System.out.println("y: " + y); // Output: 10 System.out.println("z: " + z); // Output: 5 }</code>
Dengan menggunakan teknik ini, anda boleh menukar primitif dalam Java dengan berkesan, walaupun tiada rujukan lulus.
Atas ialah kandungan terperinci Bagaimanakah anda boleh menukar nilai primitif di Jawa, memandangkan batasannya untuk lulus mengikut nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!