¿Por qué no hay ningún error cuando se asigna un final int a un byte

otras cosas:

¿Por qué aparece un error cuando

       int i=123;
       byte b=i;

Pero no en este caso

      final int i=123;
      byte b=i;
TiiJ7:

Al inicializar una finalvariable con una expresión constante, se convertirá en una constante de tiempo de compilación . En esencia, cuando se compila el código, se acaba de codificar el valor de todas partes se añade la variable. Esto se puede ver en el código de bytes:

 0  bipush 123
 2  istore_1 [i]
 3  bipush 123
 5  istore_2 [b]

Como se puede ver, empuja el valor 123directamente en el byte(igual que byte b = 123), y que es un valor válido para una byte. No funcionaría con un valor que está fuera del rango permitido para bytes.

Si la variable no es final(o no inicializado con una expresión constante), entonces el compilador lo ven como una variable normal, y las reglas normales para la asignación se aplican. Lo que significa que para asignar un int a un byte que tiene que ser moldeado:

int i = 123;
byte b = (byte) i;

Que produce este código de bytes:

0  bipush 123
2  istore_1 [i]
3  iload_1 [i]
4  i2b
5  istore_2 [b]

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=175630&siteId=1
Recomendado
Clasificación