Rumah  >  Artikel  >  Java  >  Adakah Java Lulus Objek mengikut Nilai atau Rujukan?

Adakah Java Lulus Objek mengikut Nilai atau Rujukan?

DDD
DDDasal
2024-11-16 16:17:02355semak imbas

Does Java Pass Objects by Value or by Reference?

Perbezaan "Pass by Value" Java vs. "Pass by Rujukan"

Di Java, pembolehubah menyimpan rujukan kepada objek, bukan objek diri mereka sendiri. Perbezaan ini mempengaruhi cara objek dihantar sebagai hujah kepada kaedah.

Senario A: Menghantar Rujukan

Pertimbangkan coretan kod berikut:

Foo myFoo;
myFoo = createFoo();

public Foo createFoo() {
   Foo foo = new Foo();
   return foo;
}

Apabila myFoo diberikan hasil createFoo(), objek Foo baharu dicipta dan ditetapkan kepada foo. Pembolehubah rujukan myFoo kini menunjuk kepada objek baharu ini. Jika myFoo diubah suai kemudiannya, perubahan akan menjejaskan objek Foo asal. Walau bagaimanapun, jika pembolehubah rujukan baharu diberikan kepada myFoo, ia akan menghala ke objek yang berbeza.

Senario B: Melepasi Nilai

Bedakan ini dengan yang berikut:

Foo myFoo;
createFoo(myFoo);

public void createFoo(Foo foo) {
   Foo f = new Foo();
   foo = f;
}

Dalam kes ini, kaedah createFoo() menerima rujukan kepada myFoo. Walau bagaimanapun, dalam kaedah tersebut, objek Foo baharu dicipta dan diperuntukkan kepada pembolehubah rujukan tempatan f. Baris foo = f hanya menukar rujukan dalam kaedah, bukan rujukan yang disimpan dalam kaedah panggilan. Oleh itu, sebarang pengubahsuaian yang dibuat kepada foo dalam kaedah tidak akan ditunjukkan dalam objek Foo asal.

Kesimpulan

Berdasarkan contoh ini, jelas bahawa Java sentiasa lulus hujah mengikut nilai, bukan dengan rujukan. Nilai yang diluluskan adalah rujukan kepada objek, bukan objek itu sendiri. Akibatnya, perubahan yang dibuat kepada pembolehubah rujukan dalam kaedah tidak menjejaskan objek asal. Walau bagaimanapun, perubahan yang dibuat pada objek itu sendiri melalui rujukan akan ditunjukkan dalam objek asal.

Atas ialah kandungan terperinci Adakah Java Lulus Objek mengikut Nilai atau Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn