Java doppelte Initialisierung
In welcher Weise werden diese Aussagen anders?
- Doppel-dummy = 0;
- Doppel-dummy = 0.0;
- Doppel-dummy = 0.0 d;
- Doppel-dummy = 0.0 D;
InformationsquelleAutor der Frage Alberto Zaccagni | 2009-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben versucht, ein einfaches Programm (mit beiden 0 und 100 zeigen den Unterschied zwischen "spezielle" Konstanten und Allgemeinen) die Sun-Java 6-compiler-Ausgabe wird der gleiche bytecode für die beiden 1 und 2 (Fälle 3 und 4 sind identisch zu 2, soweit der compiler betroffen ist).
So zum Beispiel:
kompiliert:
Aber ich kann nichts sehen in der Java Language Specification garantiert diese compile-Zeit in die Erweiterung des Konstanten-Ausdrücke. Es gibt compile-Zeit Verengung für Fälle wie:
als angegeben in Abschnitt 5.2, aber das ist nicht ganz das gleiche.
Vielleicht jemand mit schärferen Augen als mich finden können, eine Garantie gibt es irgendwo...
InformationsquelleAutor der Antwort Jon Skeet
Für das erste:
dem integer-literal
0
umgewandelt, ein Doppelzimmer mit einem widening primitive conversion, siehe 5.1.2 Widening Primitive Conversion in der Java Language Specification. Beachten Sie, dass diese vollständig durch den compiler, es hat keine Auswirkung auf den erzeugten bytecode.Für die anderen:
Diese drei sind genau die gleichen -
0.0
,0.0d
und0.0D
sind nur drei verschiedene Arten des Schreibens eindouble
literal. Sehen 3.10.2 Floating-Point-Literale in der JLS.InformationsquelleAutor der Antwort Jesper
Den letzten 3 sollten identisch sein. Das literal auf der rechten Seite ist ein Doppelzimmer bereits. Das 'd' oder 'D' ist implizit, wenn Sie eine decimal-literal.
Die erste ist etwas anders, dass 0 ist ein int-literal, die erweitert werden, zu verdoppeln. Ich weiß nicht, ob das noch produziert verschiedene byte-code in diesem Fall ist oder nicht; das Ergebnis sollte identisch sein sowieso.
InformationsquelleAutor der Antwort Sean Owen
für Java, ich weiß nicht genau, in C das kann wirklich gefährlich sein, wenn du weglassen, das D am Ende, da wird es nicht ändern oberen bytes, die bewirkt, dass in die variable liegt, die Nummer, die Sie eigentlich nicht einsetzen!
In Java hatte ich ein wirklich großes problem mit instatntiating BigDecimal - new BigDecimal(0) und new bigDecimal(0L) ist NICHT das gleiche, man kann es fühlen, wenn Sie bei der Migration der code von Java 1.4 zu Java 1.5. Weiß nicht warum, Sie waren schlampig über ihn, vielleicht hatten Sie es so zu tun.
InformationsquelleAutor der Antwort ante.sabo