私はクイズでこの質問に出くわしました、
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);
}
}
このプログラムの出力は「文字列バージョン」です。しかし、オーバーロードされたメソッドに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(StringBuffer)はMoneyCalcタイプにはあいまいです」というコンパイルエラーが発生します。