Pregunta

Yo entiendo que el siguiente código no funcionará

Float a=3

porque su traducido como Float a = Integer.valueOf (3). Vamos a tener una referencia del flotador en el LHS y un objeto entero en el lado derecho, que es incompatible. Pero:

1.

     `Short a=3;`

Estos trabajos, aunque aquí de nuevo, vamos a tener una referencia breve en el LHS y un objeto entero en el lado derecho.

2.

Float a=(Float) 3

Si no hubiéramos typecasted 3, habría sido traducido como Integer.valueOf (3). Ahora, tendrá que ser traducido como Float.valueOf (3)?

¿Fue útil?

Solución

Si intenta inicializar una variable con un valor más grande que puede contener (independientemente de la forma numérica del valor), el compilador le dará un mensaje de error.

char c = 0xffff; // max char hex value
byte b = 0x7f; // max byte hex value
short s = 0x7fff; // max short hex value

Aviso en el código por encima de los valores máximos posibles hexadecimales para char, byte, y corta. Si supera estos, el compilador automáticamente hará que el valor de un int y le dirá que necesita un molde estrechamiento de la asignación. Usted sabrá que ha pasado de la raya.

Así que en su caso se convierte en realidad Short s = 3 Short s = new Short(3) y obras. (No se utilizan métodos ValueOf cuando Autoboxing es por eso que los IDE modernos tienen opciones para marcar estos autoboxing como errores y podemos reemplazarlos con el método valueOf para una mejor MGMT de memoria)

En el segundo caso Float a=(Float) 3 se convertirá en Float.valueOf(3)

Otros consejos

Si su pregunta es "¿Por qué flotador f = 3; no se compila, pero Short s = 3; lo hace?", Entonces la respuesta es:

el compilador de Java hace algún trabajo especial sobre constantes enteras para que encajen con el lado de la izquierda: se encuentra el tipo y la utiliza más adecuada. Por lo tanto,

Short s = 3;

se compila a

Short s = Short.valueOf(3);

En esencia, la misma magia que ocurre cuando se escribe

short s = 3;

Pero esto se hace sólo para los números enteros, y no para los valores de coma flotante.

La forma corta es:

Float a=3.0f;

Por tipo doble:

Double b=3.0;

No hay forma de especificar constantes cortos y bytes, por lo que el compilador le permite traducir las constantes int transparente. Hay constantes flotar en Java por lo que no admite traducción implícita. Si quieres un flotador / Float le sugiero que utilice una constante flotador.

Byte b = 3;
Short s = 3;
Integer i = 3;
Long l = 3L;
Float f = 3f;
Double d = 3d;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top