primitivos - tipos de variables en java ejemplos
¿Por qué no hay byte o literales cortos en Java? (4)
Puedo crear una longitud literal añadiendo una L al valor; ¿Por qué no puedo crear un corto o un byte literal de alguna manera similar? ¿Por qué necesito usar un int literal con un molde?
Y si la respuesta es "Como no había un breve literal en C", ¿por qué no hay literales cortos en C?
Esto en realidad no afecta mi vida de ninguna manera significativa; es bastante fácil escribir (abreviado) 0 en lugar de 0S o algo así. Pero la inconsistencia me da curiosidad; es una de esas cosas que te molestan cuando te levantas tarde en la noche. En algún momento, alguien tomó una decisión de diseño para permitir el ingreso de literales para algunos de los tipos primitivos, pero no para todos. ¿Por qué?
Otra razón podría ser que la JVM no sabe de corto y byte. Todos los cálculos y el almacenamiento se realizan con ints, longs, floats y dobles dentro de la JVM.
Sospecho que es un caso de "no agregue nada al lenguaje a menos que realmente agregue valor", y se consideró que agregaba un valor lo suficientemente pequeño como para no valer la pena. Como ya dijiste, es fácil moverse y, francamente, rara vez es necesario (solo para la desambiguación).
Lo mismo es cierto en C #, y nunca me he perdido particularmente en ninguno de los dos idiomas. Lo que echo de menos en Java es un tipo de byte sin signo :)
En C, int
al menos tenía que tener el tamaño de palabra "natural" de la CPU y probablemente se suponía que era el tamaño de palabra "más grande" (no estaba seguro en esa última parte, pero también explicaría por qué int
y long
tener el mismo tamaño en x86).
Ahora, mi suposición es: para int
y long
, hay una representación natural que encaja exactamente en los registros de la máquina. Sin embargo, en la mayoría de las CPU, los byte
y short
tipo más short
tendrían que rellenarse de alguna forma antes de ser utilizados. Si ese es el caso, también puedes tener un elenco.
Hay varias cosas a considerar.
1) Como se discutió anteriormente, la JVM no tiene noción de byte o tipos cortos. En general, estos tipos no se utilizan en el cálculo a nivel de JVM; entonces uno puede pensar que habría menos uso de estos literales.
2) Para la inicialización de byte y variables cortas, si la expresión int es constante y en el rango permitido del tipo, se convierte implícitamente al tipo de destino.
3) Uno siempre puede lanzar el literal, ex (corto) 10