Programación en Java/Literales
Pueden existir varias formas de representar un valor. Por ejemplo al tener el número 100, significa exactamente 100 en una base decimal, pero hablamos de 4 en una base binaria o 256 en hexadecimal.
Para evitar ambigüedades, en Java se establecieron algunas normas.
Literales enteros
editarExisten 3 maneras de representar el valor de un número entero. Si se escribe el número solamente, éste representa un número en base decimal. Si tiene un cero delante estamos escribiendo octales y si tiene el prefijo "0x" el valor está representado en base hexadecimal. Por ejemplo:
Base de numeración | valor | valor decimal |
---|---|---|
Decimal | 100 | 100 |
Octal | 0100 | 64 |
Hexadecimal | 0x100 | 256 |
Para indicarle al compilador que un valor dado es de tipo long debemos incluir el sufijo L:
long largo= 800L;
Literales de números reales
editarAl tratar con números reales introducimos el punto decimal o utilizamos la notación científica. Por ejemplo:
double v = 300000.0; // notación normal double v = 3.0e+5; // notación -científica
En el ejemplo el valor 3.0e+5 significa . La letra e denota la mantisa, y da igual si la escribimos en mayúscula o minúscula.
Para determinar si estamos hablando de float o double, al número se le agrega un sufijo: F o f para float y D o d para double. Si no colocamos un sufijo el compilador lo toma como double.
Literales char
editarUna variable de tipo char almacena un carácter Unicode. Este sistema de codificación amplía la escasez de opciones que tiene la codificación ASCII para incluir otros alfabetos. Podemos escribir en griego, hebreo o en vietnamita sin que el compilador proteste. Un literal de tipo char se expresa encerrando el carácter entre comillas simples:
char caracter = 'z';
Otra forma de representar un carácter es indicando el código Unicode en hexadecimal, anteponiendo los símbolos \u, todo entre comillas simples. De esta manera el símbolo arroba ( @ ) se escribe:
char arroba = '\u0040';
El primer byte de la codificación Unicode es la misma que el viejo y querido ASCII
Literales boolean
editarSencillamente true o false (verdadero o falso) sin comillas y en minúscula. No tienen correlación con ningún número como ocurre en el lenguaje C que teníamos al 0 como false y al 1 como true.
Literales String
editarEl tipo String no es un tipo de dato primitivo. Pero se comporta como si lo fuera. Para indicar una cadena de caracteres se encierran entre comillas dobles.
String cadena = "Time is money";
Ejemplos de valores literales
editarLiteral | Tipo de dato |
---|---|
"Gato" | String |
"G" | String |
'G' | char |
123 | int |
8000L | long |
3.14 | double |
3.14D | double |
3.14f | float |
26.45e-45 | double |
'\u00ff' | char |
'c' | char |
"true" | String |
true | boolean |
En los sufijos que tenemos para identificar el tipo de dato no importa si son en minúscula o mayúscula. Pero por convención se utilizan en mayúscula, pues se puede confundir al leer el código una ele minúscula ( l ) con un uno ( 1 ). Hay que tener cuidado de no olvidarnos los sufijos cuando sean necesarios. El siguiente código da un error en tiempo de compilación:
float f = 3.14;
El compilador nos dará el error de "possible loss of precision" (posible pérdida de precisión). Esto se debe a que sin la F atrás, estamos indicando un valor de tipo double. El compilador se niega a comprimir un double de 64 bits en un float de tan solo 32 bits. Lo solucionamos de esta manera:
float f = 3.14f;
Y le alegramos la vida a un compilador gruñón.