Rumah > Java > javaTutorial > Mengapa Melepasi Null kepada Kaedah Lebihan Memilih Versi Rentetan Daripada Versi Objek?

Mengapa Melepasi Null kepada Kaedah Lebihan Memilih Versi Rentetan Daripada Versi Objek?

Susan Sarandon
Lepaskan: 2024-11-19 15:54:02
asal
596 orang telah melayarinya

Why Does Passing Null to a Method Overload Choose the String Version Over the Object Version?

Resolusi Terlebih Beban: Tafsiran Null Literal

Di Java, null literal ialah rujukan yang sah yang boleh diberikan kepada mana-mana pembolehubah objek , termasuk jenis rujukan seperti String. Tingkah laku ini memainkan peranan penting dalam menyelesaikan kaedah terlampau beban apabila parameter diluluskan sebagai nol.

Pertimbangkan coretan kod berikut:

public class MoneyCalc {

   public void method(Object o) {
      System.out.println("Object Verion");
   }

   public void method(String s) {
      System.out.println("String Version");
   }

   public static void main(String args[]) {
      MoneyCalc question = new MoneyCalc();
      question.method(null);
   }
}
Salin selepas log masuk

Dalam contoh ini, apabila kaedah kaedah digunakan dengan literal nol, pengkompil Java memilih kaedah(String s) lebihan dan bukannya kaedah(Objek o) lebihan. Tingkah laku ini dijelaskan oleh prinsip resolusi beban lampau paling spesifik.

Menurut Spesifikasi Bahasa Java (JLS), pengkompil memilih lebihan beban "paling spesifik", iaitu "yang yang mana seruan boleh dihantar tanpa ralat jenis masa kompilasi." Di sini, literal nol boleh dihantar ke kaedah(String s) overload tanpa sebarang ralat, tetapi bukan kepada method(Objek o) overload.

Oleh itu, pengkompil Java memilih kaedah(String s) overload. , dan output program ialah "Versi Rentetan".

Walau bagaimanapun:

...
   public void method(StringBuffer sb) {
      System.out.println("StringBuffer Verion");
   }
...
Salin selepas log masuk

Apabila ketiga beban berlebihan ditambah untuk menerima parameter StringBuffer, kod itu tidak akan disusun. Ini kerana kini kedua-dua kaedah(String s) dan kaedah(StringBuffer sb) adalah sama khusus, membawa kepada kekaburan dan menghalang pengkompil daripada memilih lebihan yang paling sesuai.

Atas ialah kandungan terperinci Mengapa Melepasi Null kepada Kaedah Lebihan Memilih Versi Rentetan Daripada Versi Objek?. 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