Es gibt keine implizite Verengung Umwandlungen im allgemeinen - konstanten Ausdrücke die einzige Ausnahme ist, und sie werden von JLS ausdrücklich erlaubt 5.2:
Darüber hinaus, wenn der Ausdruck ein konstanter Ausdruck ist (§15.28) von type byte, short, char oder int:
* Eine verengte primitive Konvertierung kann verwendet werden, wenn der Typ der Variablen byte, short oder char ist und der Wert des konstanten Ausdrucks im Typ der Variablen dargestellt werden kann Variable.
Es wird nicht erwähnt, dass implizite verkleinerte Konvertierungen für Fließkommazahlen erlaubt sind, daher sind sie gemäß der allgemeinen Regel verboten.
Ich weiß nicht, warum Sie meine Frage nicht verstehen ... Sie sagten, dass der Compiler schlau genug ist, um 20 in Byte zu setzen .... warum setzt der Compiler 1.2 nicht in float .... meine einfachen Fragen war ... ich lese, dass in java alle dezimal als doppelt behandelt werden, während alle Integer standardmäßig als int behandelt werden ...... dann wenn im 20 zu einem Byte zuweisen, warum gibt es keinen Fehler ... –