クイズで出てきたこの問題、
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 型に対してあいまいです」というコンパイル エラーが発生します。