casting += asignacion - ¿Por qué los operadores de asignación compuesta + =, - =, * =, / = de Java no requieren conversión?





5 Answers

Un buen ejemplo de este casting es usar * = o / =

byte b = 10;
b *= 5.7;
System.out.println(b); // prints 57

o

byte b = 100;
b /= 2.5;
System.out.println(b); // prints 40

o

char ch = '0';
ch *= 1.1;
System.out.println(ch); // prints '4'

o

char ch = 'A';
ch *= 1.5;
System.out.println(ch); // prints 'a'
ejemplos programacion relacionales

Hasta hoy, pensé que por ejemplo:

i += j;

Solo fue un atajo para:

i = i + j;

Pero si intentamos esto:

int i = 5;
long j = 8;

Entonces i = i + j; no compilará pero i += j; se compilará bien.

¿Significa que, de hecho, i += j; es un atajo para algo como esto i = (type of i) (i + j) ?




Sí,

básicamente cuando escribimos

i += l; 

el compilador convierte esto a

i = (int)(i + l);

Acabo de comprobar el código del archivo .class .

Realmente una buena cosa para saber




El problema aquí involucra el casting de tipos.

Cuando añades int y long,

  1. El objeto int se convierte en largo y ambos se agregan y se obtiene el objeto largo.
  2. pero el objeto largo no se puede convertir implícitamente a int. Entonces, tienes que hacer eso explícitamente.

Pero += está codificado de tal manera que hace conversión de tipo. i=(int)(i+m)




A veces, tal pregunta se puede hacer en una entrevista.

Por ejemplo, cuando escribes:

int a = 2;
long b = 3;
a = a + b;

No hay encasillamiento automático. En C ++ no habrá ningún error al compilar el código anterior, pero en Java obtendrá algo como la Incompatible type exception .

Así que para evitarlo, debes escribir tu código así:

int a = 2;
long b = 3;
a += b;// No compilation error or any exception due to the auto typecasting



Punto sutil aquí ...

Hay un encasillamiento implícito para i+j cuando j es doble e i es un int. Java SIEMPRE convierte un entero en un doble cuando hay una operación entre ellos.

Para aclarar i+=j donde i es un número entero y j es un doble, se puede describir como

i = <int>(<double>i + j)

Ver: esta descripción de casting implícito.

Es posible que desee encasillar j a (int) en este caso para mayor claridad.






Related