2010-10-29 11 views
6

Ich frage mich, warum es möglich ist, Integer als Argument zu übergeben, wenn der Methodenparameter vom Typ int ist und umgekehrt?Übergabe von Integer an int und umgekehrt

public class Salmon { 

public static Integer foo(Integer a, int b){ 
    return a - b; 
} 
public static void main(String[] args) { 
    Integer a = 10; 
    int b = 1; 
    foo(b, a); 
} 
} 

Antwort

7

Dies ist Auto-Boxen und Auto-Unboxing. Grundsätzlich setzt der Compiler Aufrufe an Integer.valueOf() oder x.intValue() entsprechend.

Der genaue Mechanismus ist nicht spezifiziert, aber die relevanten Abschnitte der Spezifikation sind 5.1.7 and 5.1.8.

+3

Es sollte angemerkt werden, dass diese Funktion eine Klasse von mysteriösen NullPointerException-Problemen mit sich bringt. – Pointy

+0

Können Sie entwickeln? In diesem Fall würde dies eine NullPointerException auslösen? – mxdsp

+0

@mxdsp: Das ist überhaupt nicht Teil der Frage. Wenn Sie auf eine NPE stoßen, die Sie nicht erklären können, stellen Sie bitte eine neue Frage, nachdem Sie * gründlich * geforscht haben. (Es gibt * viele * Fragen zu NPEs.) –