2012-07-17 12 views
13

Me preguntaba por qué no podemos hacer:Java una instancia del objeto Corto en Java

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

o incluso

Double d = new Double(2); 

y no

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

ni

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

¿Por qué necesitamos tomar los constructores con una cadena o un corto?

+3

No hay cortos ni literales en bytes Java. –

+0

@ Eng.Fouad es correcto. 0xFF es un int en java, los operadores >>> y << toman y regresan, los cortos y los bytes se dejan un poco a un lado. Sin embargo, por qué. – lynks

Respuesta

2

Una de las reglas principales en Java es que el resultado de cualquier operación matemática se almacenará en una variable de gran tamaño para evitar el truncamiento. Por ejemplo, si agrega int con long, el resultado será largo. Por lo tanto, cualquier operación en byte, char o short dará como resultado int incluso si agregó 1 en un byte. Hay 2 maneras de almacenar el resultado en el mismo tipo de datos:

a) usted hace fundición explícita:

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

b) Se puede utilizar el incremento automático de las operaciones de la mano cortos para pedir la JVM que hacer la conversión implícita:

short s=10; 
s+=21; 

O

short s=10; 
s++; 

si necesita a corto o byte literal, deben ser fundidas ya que no hay sufijo como S o s para short:

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

Incluso la adición de dos 'short's o' byte's o 'char's dará como resultado un' int'. Si bien agregar dos 'int's no dará como resultado' long'. 'int' es simplemente especial aquí. Esta es otra razón por la cual 'DataOutput # writeShort' toma un parámetro int en lugar de short. – mihi

11

Pero puede hacer esto:

Short s = 2; 

O esto:

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

O esto:

Short s = new Short("2"); 

Cualquiera de los anteriores funcionará siempre y cuando el número se encuentra en el rango [-2^15, 2^15-1]

+0

En realidad no se puede hacer Corto s = nuevo Corto ((corto) 2); O eso o mi eclipse está mal. Debe usar short short = 2; y que usarlo en el constructor. –

+3

@ NunoGonçalves funciona en mi Eclipse –

+0

Ah, mi mal, lo estaba haciendo mal ...: / –

Cuestiones relacionadas