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

Adakah Objek Java Lulus mengikut Nilai atau Rujukan?

Barbara Streisand
Lepaskan: 2024-11-21 06:14:10
asal
438 orang telah melayarinya

Does Java Pass Objects by Value or Reference?

Java: Pass by Value vs. Pass by Reference

Di Jawa, miskonsepsi sering timbul mengenai mekanisme hantaran objek. Artikel ini akan menyelidiki perbezaan antara dua coretan kod, menjelaskan prinsip asas gelagat lulus parameter Java.

Kod A lwn. Kod B

Kod A:

Foo myFoo;
myFoo = createfoo();

public Foo createFoo() {
   Foo foo = new Foo();
   return foo;
}
Salin selepas log masuk

Kod B:

Foo myFoo;
createFoo(myFoo);

public void createFoo(Foo foo) {
   Foo f = new Foo();
   foo = f;
}
Salin selepas log masuk

Memahami Pasan Parameter Java

Bertentangan dengan kepercayaan popular, Java menggunakan nilai pas, bukan rujukan. Ini bermakna apabila objek diluluskan sebagai hujah, salinan rujukannya dibuat dan bukannya rujukan terus kepada yang asal.

Penjelasan Kod A

Dalam baris pertama, myFoo ialah diisytiharkan tetapi tidak ditugaskan. Baris kedua memanggil kaedah createFoo, yang mengembalikan objek Foo baharu yang diberikan kepada myFoo. Tugasan ini mencipta objek baharu yang berbeza daripada yang dibuat dalam kaedah.

Penjelasan Kod B

Sebaliknya, Kod B menghantar rujukan myFoo sebagai hujah kepada kaedah createFoo. Dalam kaedah tersebut, objek Foo baharu dicipta dan diberikan kepada parameter foo. Selepas itu, foo ditugaskan kepada a, yang merupakan pembolehubah tempatan dalam kaedah. Penugasan semula ini secara berkesan mengubah suai foo rujukan tempatan, bukan rujukan asal myFoo.

Contoh untuk Kejelasan

Untuk menggambarkan konsep, pertimbangkan kelas berikut:

public class Foo {
   private String attribute;

   public void setAttribute(String attribute) {
      this.attribute = attribute;
   }
}
Salin selepas log masuk

Utama Kelas:

public class Main {
   public static void main(String[] args) {
      Foo f = new Foo("f");
      changeReference(f); // Attempt to change reference
      modifyReference(f); // Attempt to modify object attribute
   }

   public static void changeReference(Foo a) {
      Foo b = new Foo("b");
      a = b;
   }

   public static void modifyReference(Foo c) {
      c.setAttribute("c");
   }
}
Salin selepas log masuk

Selepas kaedah utama mencipta tika Foo dan menetapkannya kepada f, ia memanggil changeReference, yang cuba menetapkan semula rujukan kepada objek lain. Walau bagaimanapun, ini tidak mengubah rujukan f.

Sebaliknya, modifyReference mengubah suai atribut objek yang dirujuk oleh c, iaitu objek yang sama dengan f. Ini menunjukkan bahawa hantaran rujukan mencipta salinan rujukan, bukan objek itu sendiri.

Kesimpulan

Pendekatan nilai lulus Java memastikan kebolehubahan objek dengan melindungi objek asal daripada pengubahsuaian yang tidak disengajakan di luar skopnya. Prinsip ini menggalakkan enkapsulasi dan memudahkan penciptaan kod yang mantap dan boleh diramal.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan