Im Hinblick auf die Motivation: Es kann zu diesem Verhalten die Alternativen vorstellen und sehen, warum sie nicht funktionieren:
Alternative 1: das Ergebnis sollte immer die gleiche wie die Eingänge sein .
Was sollte das Ergebnis für das Hinzufügen eines int und eines short sein?
Was sollte das Ergebnis sein, um zwei Kurzschlüsse zu multiplizieren? Das Ergebnis wird im Allgemeinen in ein int passen, aber da wir zu kurz abschneiden, werden die meisten Multiplikationen stillschweigend fehlschlagen. Casting zu einem int danach wird nicht helfen.
Alternative 2: Das Ergebnis sollte immer der kleinste Typ sein, der alle möglichen Ausgaben darstellen kann.
Wenn der Rückgabetyp eine kurze war, wäre die Antwort nicht immer als kurz darstellbar.
Ein Short kann die Werte -32.768 bis 32.767 enthalten. Dann wird dieses Ergebnis einen Überlauf verursachen:
short result = -32768/-1; // 32768: not a short
So wird Ihre Frage: Warum fügt das Hinzufügen von zwei Ints nicht lange zurück? Was sollte Multiplikation von zwei Ints sein? Eine lange? Eine BigNumber, um den Fall der Quadrierung des ganzzahligen Minwerts zu behandeln?
Alternative 3: Wählen Sie das, was die meisten Menschen wahrscheinlich die meiste Zeit wollen
So sollte das Ergebnis sein:
- int für zwei Shorts Multiplikation oder eine beliebige Operationen int.
- kurz, wenn das Hinzufügen oder Subtrahieren von Shorts, eine kurze durch eine Integer-Typ Dividieren, Multiplizieren zwei Bytes, ...
- Byte, wenn ein Byte nach rechts bitshifting, int nach links, wenn bitshifting.
- etc ...
Erinnerung an alle besonderen Fällen schwierig wäre, wenn es ihnen keine grundlegende Logik. Es ist einfacher zu sagen: Das Ergebnis von Integer-Operationen ist immer ein int.
Die Umwandlung eines int in einen kurzen Wert würde möglicherweise zu einem Verlust der Genauigkeit führen. (-32768/-1) –