Aggiungendo a una risposta esistente, non sono sicuro se ciò è dovuto a una versione di Java più recente dalla domanda, ma quando ho provato a compilare il codice con un metodo prendendo un intero come parametro invece di un oggetto , il codice è ancora compilato. Tuttavia, la chiamata con null come parametro ha ancora invocato il metodo del parametro String in fase di esecuzione.
Ad esempio,
public void testMethod(int i){
System.out.println("Inside int Method");
}
public void testMethod(String s){
System.out.println("Inside String Method");
}
darà ancora l'output:
Inside String Method
quando chiamato come:
test1.testMethod(null);
La ragione principale di questo è perché String non accetta null come un valore e int no. Quindi null è classificato come oggetto String.
Tornando alla domanda posta, il tipo Oggetto si trova solo quando viene creato un nuovo oggetto.Questo è fatto da entrambi i tipi di colata null come un oggetto da
test1.testMethod((Object) null);
o utilizzare qualsiasi tipo di oggetto per un'operazione primitiva come
test1.testMethod((Integer) null);
or
test1.testMethod((Boolean) null);
o semplicemente creando un nuovo oggetto
test1.testMethod(new Test1());
va notato che
test1.testMethod((String) null);
invocherà di nuovo il metodo String poiché ciò creerebbe un oggetto di tipo String.
Inoltre,
test1.testMethod((int) null);
and
test1.testMethod((boolean) null);
darà un errore di compilazione dal booleano e int non accettano nulla come un valore valido e come int! = Integer e boolean! = Booleano. Il tipo intero e il valore booleano vengono convertiti in oggetti di tipo int e booleani.
fonte
2016-04-26 23:23:29
+1 Sembrava una domanda super facile, ma l'utilizzo di null ... È davvero interessante ... –
possibile duplicazione di [Strano comportamento Java non valido in Sovraccarico metodo] (http://stackoverflow.com/questions/14789478/ strange-java-null-behavior-in-method-overloading) –
@RohitJain quella domanda è già un duplicato di [this] (http://stackoverflow.com/questions/1545501/which-overload-will-get-selected- for-null-in-java) – mariomario