Ich habe eine Frage über die Förderung von primitiven Typen in Java. Wie im folgenden Beispiel zu sehen ist, kompiliert eine der Methoden aufgrund eines Fehlers der Typenkonflikt nicht. Jede Methode gibt denselben Wert zurück, jedoch in unterschiedlichen Typen.Förderung von primitiven Typen
Die Version der primitiven long
-Methode funktioniert ohne Fehler, während die Version der Wrapper-Klasse Long
fehlschlägt. Dies liegt daran, dass das int
Literal in der return
-Anweisung zuerst zu einem breiteren primitiven Typ (z. B. long
) und dann zur entsprechenden Wrapper-Klasse Integer
und so weiter befördert wird. Da Integer
keine Unterklasse von Long
ist, gibt der Compiler einen Fehler aus.
Aber warum funktioniert die Version der Wrapper-Klasse Byte
ohne Fehler? Was genau macht der Compiler zu diesem Zeitpunkt?
long getPrimitiveLong() {
return 12; // valid
}
Long getWrapperLong() {
return 12; // Error: type mismatch
}
Byte getWrapperByte() {
return 12; // valid
}
Haben Sie 'return 12L;' für 'getWrapperLong' versucht? Es scheint für mich zu funktionieren. – OldCurmudgeon
Ja, es funktioniert mit 12L oder (lang) 12. –