あいまいなオーバーロードの解決はコンパイル時に行われる

フヒヒヒヒすいません! Java使いはじめて4年経つけど、ずーっと勘違いしていた。
あいまいなオーバーロードの解決は、実行時ではなくコンパイル時に行われる。
こんなのがあったら

public class OverloadTest {

	public static void test(Object o) {
		System.out.println("Object: " + o);
	}

	public static void test(String s) {
		System.out.println("String: " + s);
	}
}


これの出力は

	Object o = "テスト";
	OverloadTest.test(o);
	
	String s = "テスト";
	OverloadTest.test(s);

こうなる:

Object: テスト
String: テスト


こうじゃない:

String: テスト
String: テスト


中身がnullの時も、引数の参照の型でどっち呼ぶか決まる。

	Object o = null; 
	OverloadTest.test(o);
	
	String s = null;
	OverloadTest.test(s);

Object: null
String: null