ฉันเจอคำถามนี้ในแบบทดสอบ
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);
}
}
ผลลัพธ์ของโปรแกรมนี้คือ "String Version" แต่ฉันไม่เข้าใจว่าทำไมการส่ง null ไปยังเมธอดที่โอเวอร์โหลดจึงเลือกเวอร์ชันสตริง เป็น null ตัวแปร String ชี้ไปที่อะไร?
อย่างไรก็ตามเมื่อเปลี่ยนรหัสเป็น
public class MoneyCalc {
public void method(StringBuffer sb) {
System.out.println("StringBuffer Verion");
}
public void method(String s) {
System.out.println("String Version");
}
public static void main(String args[]) {
MoneyCalc question = new MoneyCalc();
question.method(null);
}
}
มันทำให้เกิดข้อผิดพลาดในการคอมไพล์ว่า "method method (StringBuffer) ไม่ชัดเจนสำหรับประเภท MoneyCalc"