# 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

Existen 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:

## Literales de números reales

Al tratar con números reales introducimos el punto decimal o utilizamos la notación científica. Por ejemplo:
En el ejemplo el valor 3.0e+5 significa $3.0*10^{5}$. 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

Una 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:
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:
El primer byte de la codificación Unicode es la misma que el viejo y querido ASCII

## Literales boolean

Sencillamente 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

El 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.

## Ejemplos de valores literales

| Literal | 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:
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:
Y le alegramos la vida a un compilador gruñón.