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); } }
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"); } ...
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!