Rumah  >  Artikel  >  Java  >  Mengapakah menghantar `null` kepada kaedah terlebih beban dalam Java memanggil kaedah dengan parameter `String`?

Mengapakah menghantar `null` kepada kaedah terlebih beban dalam Java memanggil kaedah dengan parameter `String`?

Susan Sarandon
Susan Sarandonasal
2024-11-07 02:35:02909semak imbas

Why does passing `null` to an overloaded method in Java call the method with the `String` parameter?

Pembebanan Kaedah dan Pemilihan Parameter Null

Di Java, apabila kaedah terlebih beban, berbilang kaedah wujud dengan nama yang sama tetapi senarai parameter berbeza . Apabila penyeruan kaedah dibuat, pengkompil menentukan kaedah terlampau beban untuk dipanggil berdasarkan bilangan dan jenis argumen sebenar yang diluluskan.

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);
   }
}

Soalan: Mengapakah menghantar nilai nol kepada kaedah kaedah terlebih beban memanggil versi kaedah(String)?

Jawapan:

Dalam Java, null ialah nilai pemalar khas yang mewakili rujukan kepada objek yang tidak wujud. Ia bukan nilai bagi mana-mana jenis tertentu, tetapi ia boleh diberikan kepada pembolehubah mana-mana jenis rujukan, termasuk Objek dan Rentetan.

Apabila penyeruan kaedah dibuat dengan null sebagai argumen, pengkompil memilih kaedah(String) versi kerana ia lebih khusus daripada versi kaedah(Objek). Menurut Spesifikasi Bahasa Java (JLS), beban lampau yang paling spesifik dipilih berdasarkan kebolehgunaan dan kekhususannya.

Kebolehgunaan merujuk kepada sama ada hujah boleh dihantar kepada kaedah tanpa ralat masa kompilasi. Dalam kes ini, null boleh digunakan untuk kedua-dua kaedah kerana ia boleh diperuntukkan kepada pembolehubah kedua-dua jenis Objek dan Rentetan.

Kekhususan mengukur sejauh mana pengkhususan kaedah untuk hujah yang diberikan. Dalam kes ini, kaedah(String) lebihan adalah lebih khusus kerana ia direka untuk mengendalikan hujah jenis String sahaja. Kelebihan kaedah(Objek) adalah lebih umum kerana ia boleh mengendalikan argumen jenis Object atau mana-mana subkelasnya.

Oleh itu, pengkompil memilih versi kaedah(String) kerana ia lebih khusus dan terpakai kepada yang disediakan hujah, yang merupakan rujukan nol.

Nota: Jika kaedah terlebih muatan kedua dengan StringBuffer sebagai jenis parameter ditambahkan pada kelas MoneyCalc, ralat penyusunan akan berlaku. Ini kerana kaedah(String) mahupun kaedah(StringBuffer) tidak akan lebih spesifik daripada yang lain dalam kes ini, yang membawa kepada kekaburan dalam pemilihan kaedah.

Atas ialah kandungan terperinci Mengapakah menghantar `null` kepada kaedah terlebih beban dalam Java memanggil kaedah dengan parameter `String`?. 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