En JAVA se pueden distinguir 8 tipos de datos primitivos, que detallaremos a continuación, y son:
La única diferencia entre los números enteros en Java es la cantidad de almacenamiento que poseen (en bits) y, por lo tanto, el rango de valores que podremos representar con cada uno de ellos. Y estos son:
Tipo de dato | Espacio en memoria | Valor mínimo | Valor máximo |
---|---|---|---|
byte | 8 bits | -128 | 127 |
short | 16 bits | -32768 | 32767 |
int | 32 bits | -2147483648 | 2147483647 |
long | 64 bits | -9223372036854775808 | 9223372036854775807 |
Hay que tener en cuenta un par de conceptos para realizar operaciones con números enteros: el desbordamiento y la división por cero. El desbordamiento es el momento en que sobrepasamos el valor máximo que puede representar un entero (excepto los de tipo long, que no se pueden sobrepasar). Cuando esto ocurre, el compilador no nos va a avisar, simplemente se limitará a mostrarnos un resultado incorrecto, que sería en función del dato:
Tipo | Operación | Resultado |
---|---|---|
byte | 127 + 1 | -128 |
short | 32767 + 1 | -32768 |
int | 2147483647 + 1 | -2147483648 |
Para que esto no ocurra, hay que tener presente la tabla anterior, del rango de valores, y calcular que nuestro resultado esté comprendido entre los valores del tipo de dato, en caso de duda, usar un dato con una capacidad de almacenamiento mayor.
La división por cero no existe, esto quiere decir que no podremos dividir en ningún momento un número por cero, porque el programa terminará de forma brusca dándonos el siguiente error en tiempo de ejecución:
Exception in thread "main"
java.lang.ArithmeticException: / by zero
at...
Utilizaremos estos tipos de datos para representar decimales, tienen un rango de valores muy amplio, por lo que podremos representar tanto números muy pequeños como números muy grandes. y son:
Tipo de dato | Espacio en memoria | Mínimo (valor absoluto) | Máximo (valor absoluto) | Dígitos significativos |
---|---|---|---|---|
float | 32 bits | 1.4 x 10-45 | 3.4 x 1038 | 6 |
double | 64 bits | 4.9 x 10-324 | 1.8 x 10308 | 15 |
Una "ventaja" de este tipo de datos numéricos es que las operaciones con ellos no dan error como con los enteros. Si realizamos una operación con desbordamiento el resultado será:
+Infinity / -Infinity
Cuando realizamos una división por cero o cualquier otro tipo de operación cuyo resultado sea indeterminado, obtendremos como resultado:
NaN (Not A Number)
Los datos de tipo char se utilizan para almacenar caracteres. En realidad lo que estamos almacenando son números ya que emplea la codificación unicode, en la que a cada caracter se le asigna un número concreto, y ese número es lo que almacenamos para luego mostrar el caracter.
Tipo de dato | Espacio en memoria | Codificación |
---|---|---|
char | 16 bits | UNICODE |
Los caracteres se almacenan poniendo el valor entre comillas simples, por ejemplo: 'a' '1' '*'... Pero existen una serie de secuencias de escape para representar ciertos caracteres especiales, que son:
Secuencia | Descripción |
---|---|
\t | Tabulador |
\n | Salto de línea (Intro) |
\r | Retorno de carro |
\b | Retroceso |
\' | Comillas simples |
\" | Comillas dobles |
\\ | Barra invertida |
\? | Signo de interrogación |
Las cadenas de caracteres no son tipos de datos primitivos, sino una clase predefinida (string). Como su propio nombre indica, una cadena de caracteres es una secuencia de letras, y son inmutables, una vez que tengamos la cadena no podremos cambiar los caracteres individuales que la componen. Lo veremos más detalladamente en temas posteriores. Las cadenas de caracteres las vamos a almacenar introduciendo el texto entre comillas dobles. Para almacenar ciertos caracteres vamos a necesitar las secuencias de escape vistas anteriormente. Por ejemplo, almacenaremos: Esta "cadena" de 'caracteres'
"Esta \"cadena\" de \'caracteres\'"
Los tipos de datos booleanos nos van a permitir evaluar expresiones con valores de verdadero o falso. Trabajan a nivel de bits, por lo que darán como respuesta 1 en caso de que sea verdadero (true) o 0 en caso de que sea falso (false):
Tipo de dato | Espacio en memoria | Valores |
---|---|---|
boolean | 1 bit | true o false |
Dentro de los operadores utilizados para realizar expresiones con este tipo de datos, tenemos relacionales (son válidos para números y caracteres) y lógicos (son booleanos y sirven para evaluar expresiones lógicas mediante el uso de tablas de verdad)
Operador | Significado |
---|---|
== | Igual |
!= | Distinto |
< | Menor que |
> | Mayor que |
<= | Menor o igual que |
> | Mayor o igual que |
Operador | Nombre | Significado |
---|---|---|
! | NOT | Negación lógica |
&& | AND | 'y' lógico |
|| | OR | 'o' inclusivo |
^ | XOR | 'o' exclusivo |
A | B | !A | A&&B | A||B | A^B |
---|---|---|---|---|---|
false | false | true | false | false | false |
false | true | true | false | true | true |
true | false | false | false | true | true |
true | true | false | true | true | false |