2012-09-21 12 views
9

Un colega mío me hizo esta pregunta y estoy un poco confundido.Añadiendo int al corto

int i = 123456; 
short x = 12; 

La declaración

x += i; 

compila bien sin embargo

x = x + i; 

no

Lo que está haciendo de Java aquí?

+0

Sin embargo, está intentando agregar int al resumen. a = b! = b = a –

+0

En realidad está agregando un int a un corto –

+3

Para mayor interés, intente esto 'char ch = '0'; ch * = 1.2; 'now ch is' '8'';) –

Respuesta

15
int i = 123456; 
short x = 12; 
x += i; 

es en realidad

int i = 123456; 
short x = 12; 
x = (short)(x + i); 

Mientras x = x + i es simplemente x = x + i. No se emite automáticamente como short y, por lo tanto, causa el error (x + i es del tipo int).


Una expresión de asignación compuesto de la forma E1 op= E2 es equivalente a E1 = (T)((E1) op (E2)), donde T es el tipo de E1, excepto que E1 se evalúa sólo una vez.

- JLS §15.26.2

2

Los números se tratan como int a menos que específicamente los arroje de otra manera. Por lo tanto, en la segunda declaración cuando utiliza un número literal en lugar de una variable, no lo convierte automáticamente al tipo apropiado.

x = x + (short)1; 

... debería funcionar.

+0

Escribí la ecuación equivocada. Actualicé mi pregunta Ver su 'x = x + i'. –

+0

Ok, entonces ¿por qué no x = x + x; ¿trabajo? El problema no está en el número 1 sino en el operador + que devuelve un int. – lleite

1

El operador + del tipo integral (int, short, carbón de leña y de bytes) siempre devuelve un int como resultado.

se puede ver que con este código:

//char x = 0; 
//short x = 0; 
//byte x = 0; 
int x = 0; 
x = x + x; 

No va a compilar menos x es un int.

Cuestiones relacionadas