Scusate per il titolo.
Perchè il seguente codice stampa "String" e non "Object":
codice:
public class Test {
	public void mioMetodo(Object o) {
		System.out.println("Object");
	}
	public void mioMetodo(String s) {
		System.out.println("String");
	}
	public static void main(String[] args) {
		Test t = new Test();
		t.mioMetodo(null);
	}
}
Visto che il seguente codice stampa "no" e non "si":

codice:
public class Test2 {
	public static void main(String args[]) {
		String s = null;
		if (s instanceof String)
			System.out.println("si");
		else
			System.out.println("no");
	}
}
Inoltre se ragruppo in un solo test entrambi i risultati mi da "String - no"

codice:
public class Test3 {
	public void mioMetodo(Object o) {
		System.out.print("Object - ");
	}
	public void mioMetodo(String s) {
		System.out.print("String - ");
		if (s instanceof String)
			System.out.println("si");
		else
			System.out.println("no");
	}
	public static void main(String[] args) {
		Test t = new Test();
		t.mioMetodo(null);
	}
}
Grazie