Frage

Ich verstehe, dass der folgende Code wird nicht funktionieren

Float a=3

, weil sein übersetzt als Float a = Integer.valueOf (3). Wir werden einen Float Bezug auf die LHS haben und ein Integer-Objekt auf der RHS, die nicht kompatibel ist. Aber:

1.

     `Short a=3;`

Das funktioniert, hier allerdings wieder werden wir eine Kurzreferenz auf der LHS haben und ein Integer-Objekt auf der RHS.

2.

Float a=(Float) 3

Wenn wir nicht 3 typecasted hätten, wäre es als Integer.valueOf übersetzt wurde (3). Nun wird es als Float.valueOf übersetzt werden (3)?

War es hilfreich?

Lösung

Wenn Sie versuchen, eine Variable mit einem Wert größer zu initialisieren, als es (unabhängig von der numerischen Form des Wertes) halten kann, wird der Compiler eine Fehlermeldung geben.

char c = 0xffff; // max char hex value
byte b = 0x7f; // max byte hex value
short s = 0x7fff; // max short hex value

Beachten Sie im obigen Code der maximal möglichen hexadezimalen Werte für char, byte, und kurz. Wenn Sie diese überschreiten, wird der Compiler automatisch den Wert eines int machen und Ihnen sagt, dass Sie eine Verengung Besetzung für die Zuordnung müssen. Sie wissen, dass Sie die Grenze überschritten haben.

So in Ihrem Fall Short s = 3 wird tatsächlich Short s = new Short(3) und arbeitet. (ValueOf Methoden werden nicht verwendet, wenn Autoboxing, deshalb moderne IDEs Optionen Flagge diese Autoboxing als Fehler haben, und wir können sie mit der valueOf Methode für eine bessere mgmt Speicher ersetzen)

Im zweiten Fall Float a=(Float) 3 wird sich Float.valueOf(3)

Andere Tipps

Wenn Ihre Frage ist: "Warum Float f = 3; nicht kompiliert, aber Short s = 3; tut?", Dann ist die Antwort:

der Java-Compiler hat einige spezielle Arbeiten auf ganzzahlige Konstanten sie mit der linken Seite zu passen: es findet die am besten geeignete Art und nutzt sie. Also,

Short s = 3;

wird kompiliert

Short s = Short.valueOf(3);

Im Wesentlichen die gleiche Magie passiert, wenn Sie schreiben

short s = 3;

Aber dies geschieht nur für Integers, und nicht für Fließkommawerte.

Die Kurzform lautet:

Float a=3.0f;

Für Doppel Typ:

Double b=3.0;

Es gibt keine Möglichkeit, kurze und Byte-Konstanten angeben, so dass der Compiler ermöglicht es Ihnen, int Konstanten transparent zu übersetzen. Es gibt float Konstanten in Java, so dass es nicht implizierte Übersetzung unterstützt. Wenn Sie einen Schwimmer wollen / Float Ich schlage vor, Sie einen Schwimmer Konstante verwenden.

Byte b = 3;
Short s = 3;
Integer i = 3;
Long l = 3L;
Float f = 3f;
Double d = 3d;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top