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í?
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í?
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 aE1 = (T)((E1) op (E2))
, dondeT
es el tipo deE1
, excepto queE1
se evalúa sólo una vez.
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.
Escribí la ecuación equivocada. Actualicé mi pregunta Ver su 'x = x + i'. –
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
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
.
Sin embargo, está intentando agregar int al resumen. a = b! = b = a –
En realidad está agregando un int a un corto –
Para mayor interés, intente esto 'char ch = '0'; ch * = 1.2; 'now ch is' '8'';) –