Java Pass By Value vs. Rujukan: Menganalisis Perbezaan
Dalam Java, hujah diluluskan mengikut nilai, bukan rujukan. Konsep ini boleh mengelirukan, terutamanya apabila berurusan dengan objek. Mari kita periksa perbezaan halus antara dua coretan kod:
Kod A:
Foo myFoo; myFoo = createfoo();
Kod B:
Foo myFoo; createFoo(myFoo); public void createFoo(Foo foo) { Foo f = new Foo(); foo = f; }
Memahami Kod A
Dalam Kod A, pembolehubah rujukan myFoo dicipta dan diberikan kepada objek yang dikembalikan oleh createfoo(). Walau bagaimanapun, dalam Java, objek diluluskan oleh nilai, bukan dengan rujukan. Ini bermakna salinan objek dibuat dan diberikan kepada myFoo. Sebarang perubahan yang dibuat pada salinan ini tidak akan menjejaskan objek asal dalam createfoo().
Memahami Kod B
Kod B menggunakan fungsi createFoo() dengan parameter foo . Sekali lagi, foo ialah salinan pembolehubah rujukan asal myFoo. Jadi, apabila f dicipta dan diberikan kepada foo, ia sebenarnya menggantikan salinan myFoo di dalam createFoo(). Sebarang perubahan yang dibuat kepada foo dalam createFoo() akan ditunjukkan dalam pembolehubah rujukan myFoo asal.
Contoh untuk Menjelaskan Perbezaan
Untuk menjelaskan lebih lanjut, pertimbangkan contoh berikut :
public class Main { public static void main(String[] args) { Foo f = new Foo("f"); changeReference(f); // Will not change the reference! modifyReference(f); // Will modify the object referred by "f"! } public static void changeReference(Foo a) { Foo b = new Foo("b"); a = b; // Re-assigns 'a' reference to the new object, not 'f'. } public static void modifyReference(Foo c) { c.setAttribute("c"); // Modifies the object referred by 'c', same as 'f'. } private static class Foo { private String attribute; public Foo(String attribute) { this.attribute = attribute; } public void setAttribute(String attribute) { this.attribute = attribute; } } }
Apabila melaksanakan kod ini:
Kesimpulan
Dalam Java, objek dihantar mengikut nilai, yang bermaksud salinan objek diluluskan sebagai hujah. Sebarang perubahan yang dibuat pada salinan dalam kaedah tidak menjejaskan objek asal. Walau bagaimanapun, jika kaedah mengubah suai objek itu sendiri (cth., dengan menukar atributnya), objek asal akan terjejas. Adalah penting untuk memahami konsep ini apabila bekerja dengan objek dalam Java untuk mengelakkan kemungkinan kekeliruan.
Atas ialah kandungan terperinci Bagaimana Java Mengendalikan Objek Lulus: Mengikut Nilai atau Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!