2012-07-17 22 views
13

ich mich gefragt, warum wir das tun können:Java instanziiert Short-Objekt in Java

Long l = 2L; 
Float f = 2f; 
Double d = 2d; 

oder sogar

Double d = new Double(2); 

und nicht

Short s = 2s; //or whatever letter it could be 

noch

Short s = new Short(2); //I know in this case 2 is an int but couldn't it be casted internally or something? 

Warum müssen wir die Konstruktoren entweder mit einem String oder einem Short verwenden.

+3

Es gibt keine Kurz noch Byte Literale in Java. –

+0

@ Eng.Fouad ist richtig. 0xFF ist ein Int in Java, die >> und << Operatoren nehmen und geben Ints zurück, Shorts und Bytes sind nur ein bisschen auf der einen Seite. Keine Ahnung warum. – lynks

Antwort

2

Eine der Hauptregel in Java ist, dass das Ergebnis einer mathematischen Operation in einer großen Variablen gespeichert wird, um eine Kürzung zu vermeiden. Wenn Sie beispielsweise int mit long hinzufügen, ist das Ergebnis lang. Jede Operation für Byte, char oder short führt daher zu einem int, auch wenn Sie 1 zu einem Byte hinzugefügt haben. Es gibt 2 Möglichkeiten, das Ergebnis im selben Datentyp zu speichern:

a) Sie tun explizite Umwandlung:

short s=10; 
s=(short)(s+1); 

b) Sie können die Autoinkrement von kurzen Hand-Operationen verwenden, um die JVM zu stellen implizites Casting zu tun:

short s=10; 
s+=21; 

ODER

short s=10; 
s++; 

wenn Sie kurz oder Byte wörtlichen, müssen sie gegossen werden, da es kein Suffix wie S oder s für short ist:

byte foo = (byte)100000; 
short bar = (short)100000; 
+0

Wenn Sie zwei 'short's oder' byte' oder 'char's hinzufügen, ergibt sich ein' int'. Das Hinzufügen von zwei 'int's wird nicht zu einem' long' führen. 'int' ist hier nur etwas Besonderes. Dies ist ein weiterer Grund, warum 'DataOutput # writeShort' einen int-Parameter anstelle von short verwendet. – mihi

11

Aber Sie können dies tun:

Short s = 2; 

Oder dies:

Short s = new Short((short)2); 

Oder diese:

Short s = new Short("2"); 

Jede der oben wird funktionieren, solange die Zahl im Bereich [-2^15, 2^15-1]

+0

Eigentlich kann man nicht machen Short s = new Short ((kurz) 2); Entweder das oder meine Sonnenfinsternis ist falsch. Sie müssen short short = 2 verwenden; und dann im Konstruktor verwenden. –

+3

@ NunoGonçalves es funktioniert in meiner Eclipse –

+0

Ah, mein Schlechter, ich habe es falsch gemacht ...: / –