Ich habe festgestellt, dass Java-Compile hat ein nicht erwartetes Verhalten in Bezug auf Zuweisung und Self-Assignment-Anweisungen mit einem int und einem Float.implizite Konvertierung in Java-Operator + =
Der folgende Codeblock zeigt den Fehler.
int i = 3;
float f = 0.1f;
i += f; // no compile error, but i = 3
i = i + f; // COMPILE ERROR
In der Selbstzuweisung
i += f
die Kompilierung wird einen Fehler nicht ausgeben, aber das Ergebnis des exaluation ist ein int mit dem Wert3
und die Variablei
erhält den Wert3
.Im
i = i + f
Ausdruck der Compiler gibt einen Fehler mit „Fehlern: möglichen Verlust an Präzision“ Nachricht.
Kann jemand dieses Verhalten erklären.
EDIT: Ich habe diesen Code Block geschrieben in https://compilr.com/cguedes/java-autoassignment-error/Program.java
durchgeführt wird Die Java-Sprache-Spezifikation ist, wo Sie die Erklärung finden. Es ist frei online verfügbar. –
Um fair zu sein, "Ich habe (und habe) in Kapitel 5. Conversions and Promotions" nachgesehen, bevor ich über diese Frage gestolpert bin; Kapitel 15 erscheint nicht einmal auf der ersten Seite nach "Java implicitly narrowing conversion". Das Finden der Information war nicht unbedingt ein Zeichen dafür, dass man nicht gesucht hat, und Ihr Kommentar hat in keiner Weise geholfen –