Zusätzlich zu den anderen Antworten, die die Regeln im Detail buchstabieren, denke ich, es ist auch eine Überlegung wert, warum es so sein sollte. Angenommen, Sie tun
Die wahre mathematische Antwort auf diese Multiplikation ist 5.4. Wenn also die Antwort long
wäre, müsste es 5L
sein (5 ist die nächste ganze Zahl bis 5,4). Wegen dieser Art von Sache macht es viel mehr Sinn für das Ergebnis der Multiplikation eines Gleitkommawertes mit einer ganzen Zahl als Gleitkommawert. Ich denke, dass es auf Stack Overflow viele weitere Fragen dazu geben würde, wenn die folgende Codezeile 5
gedruckt würde.
System.out.println(2.7F * 2L);
In der Tat druckt es 5.4
.
Es ist auch sinnvoll, dass alle Operationen zwischen Integer-Typen (außer long
) mit int
durchgeführt werden. Schließlich wird ein byte
in der Regel als ein kleines Paket von Daten gedacht, und ein char
wird normalerweise als ein Zeichen gedacht. Aus diesen Perspektiven multipliziert byte
oder char
Werte ist nicht wirklich sinnvoll. Es macht viel mehr Sinn, die Regeln einfach zu halten und einfach die Operationen mit int
durchzuführen.
Dies wird ausführlich in der Java Language Specification behandelt. Es gibt ein ganzes Kapitel [Conversions and Contexts] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html). –
https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.6.2 –