Tipos de datos en Java
Muy buenos días, tardes o noches, según el horario en que me estén leyendo. Una vez más, agradezco el apoyo al blog y les hago la invitación para comentar sus dudas. En esta ocasión les traigo información sobre los tipos de datos en Java.
Los datos y el procesamiento de la información.
El procesamiento de la información es el principal objetivo de las ciencias de la computación. Ya sea que se trate de crear un sistema o de implementar una infraestructura de red, el fin es el mismo: dotar al cliente final de herramientas para realizar el procesamiento de la información. Para explicar esta idea, observa la figura 1, en la cual se muestran los elementos del procesamiento de la información.

Figura 1. El proceso de la información
Los datos son el elemento de entrada del proceso. Los datos son hechos que se extraen de la realidad y que pueden alimentar el proceso. Pueden ser texto, números, audio, imágenes, etc.
Imaginemos un sistema de control de temperatura. Los datos de entrada son las temperaturas leídas del ambiente monitoreado, y entran al sistema en forma numérica. Los datos alimentan al proceso, el cual puede ser un sistema que compare los datos de entrada contra los valores de temperatura máxima y mínima permitidos. En base a estos datos, el sistema puede emitir una alarma o un reporte. A este reporte se le considera información, la cual básicamente son datos procesados.
La figura 2 muestra un esquema que resume la importancia de los datos en la programación.

Figura 2. Los datos como el primer elemento del proceso de la información
Como puede apreciarse, los datos ingresan a una computadora a través de dispositivos periféricos de entrada (como teclado, mouse, y otros) y/o dispositivos de almacenamiento secundario, como memorias USB, CD’s, DVD’s, disco duro, etc.
Estructuras de datos.
Para que los datos formen parte del procesamiento de la información, deben encontrarse en la memoria principal o memoria RAM. Y ahí se representan de forma lógica a través de una estructura de datos, la cual define un contenedor para el dato que puede ser:
- Constante: es un contenedor cuyo contenido se fija al inicio del programa. Se “cierra” durante la ejecución, de tal manera que no puede modificarse el dato almacenado.
- Variable: es un contenedor cuyo contenido puede cambiar durante la ejecución del programa.
El contenedor se puede concebir como una casilla de memoria RAM (o varias) cuyo contenido es un dato de entrada.
Las estructuras de datos pueden ser tan simples como aquellas que sólo son capaces de almacenar un solo dato a la vez, o tan complejas como las que almacenan una gran cantidad de datos y tienen una organización de acceso a los datos muy específica. En la figura 3 puedes observar una clasificación de las estructuras de datos más comunes que se manejan en la programación de computadoras.

Figura 3. Clasificación de las estructuras de datos
Propiedades de los contenedores de datos
Son tres las características más importantes de los contenedores de datos, ya sean variables o constantes:
- Identificador: es el nombre del contenedor del dato. El identificador es el nombre que se le dará a un contenedor en un programa.
- Tipo de dato: Es el tipo de valor que puede almacenar el contenedor.
- Operaciones permitidas: Es el tipo de operaciones que se pueden realizar con los datos del contenedor. Son establecidas por el tipo de dato.
Una vista general de los tipos de datos usados en programación
Se puede decir que existen tres tipos de datos básicos que se usan en programación. En la figura 4 te muestro un esquema sobre estos.

Figura 4. Los tipos de datos básicos usados en programación
Tipos de datos primitivos de Java.
El lenguaje de programación Java es un lenguaje fuertemente tipado. Esto significa que a todos los datos se les debe definir un tipo antes utilizarlos. Dado que Java es un lenguaje de programación orientado a objetos, utiliza el término “Tipo de datos” para referirse tanto a variables, constantes u objetos, en general a cualquier “cosa” que utilice un espacio en memoria. Además, debido a que Java permite que el programador diseñe sus propias clases, éstas también pueden convertirse en tipos de datos. Es por ello que Java distingue a los tipos de datos “originales”, predefinidos por el lenguaje y los denomina tipos de datos primitivos.
Se puede decir que estos tipos de datos son la base para definir a tipos de datos compuestos, por eso se les da el nombre de primitivos, porque de ellos parten los demás.
Para definir estos datos se usan palabras reservadas del lenguaje. En la figura 5 muestro los tipos de datos primitivos de java, la palabra reservada que los identifica, el tamaño de almacenamiento en memoria que utiliza cada tipo y el rango de valores que puede almacenar.

Figura 5. Tipos de datos primitivos de Java (creada a partir de la tabla del Apéndice D – Cómo programar en Java, 7a. edición, Deitel & Deitel)
En relación a la figura 5, considero importante clarificar algunos puntos sobre los tipos de datos:
El rango de valores.
Es un factor importante a considerar en el momento de estar planeando el algoritmo. Considera que, aunque un valor calculado puede nunca dejar de ser entero, si puede pasar del rango de valores que el tipo puede almacenar, y eso puede generar un comportamiento errático del programa.
Por ejemplo, un problema muy popular al aprender a programar es el cálculo del factorial de un número, el cual se denota
x!
y que es el resultado de multiplicar el número original por su antecesor hasta llegar a uno. Es decir:
5! = 5 x 4 x 3 x 2 x 1 = 120.
Entonces puedes pensar que definir x como int es lo correcto, puesto que si multiplicas un entero por otro entero el resultado siempre será entero. ¿Pero qué sucede con el factorial de 8? 8! = 40,320 un valor que claramente se encuentra fuera del rango de los valores que puede almacenar un entero. Si definiste x como tipo int y x va de 1 a 100, al momento de llegar a 8 comenzará a arrojar resultados que no esperabas.
Como docente no espero que te aprendas de memoria los rangos de valores permitidos. Sin embargo nunca está de más hacer un formulario de esta tabla. Puede ayudarte cuando obtengas valores inesperados, y sacarte de apuros antes de volverte loc@ con la lógica del programa.
El tamaño en bits
Este factor no es importante cuando tu programa sólo obtenga el promedio de la calificación de 10 personas. Y tal vez pienses que tu maestro exagera cuando te llama la atención por haber usado un double cuando bien pudiste usar un int. Lamento decirte que no exagera.
Recuerda que cada una de las variables que utilices ocupa un lugar de almacenamiento en la memoria RAM. Mientras más variables declares, más espacio de RAM estará utilizando. En programas simples esto no es un problema, pero sí cuando el desempeño y la eficiencia del uso de la RAM sean importantes.
¿Y en qué tipo de situaciones es importante el uso de la RAM? Piensa en las aplicaciones móviles. Como usuarios de smartphones y tablets, no queremos instalar una app que ocupe mucha memoria de nuestro dispositivo. Piensa también en todos los juegos que se programan y que responden eficientemente al manejo de la RAM: estos programas requieren un algoritmo eficiente más el uso adecuado de las estructuras de datos utilizadas para ello. Y así como estos existen muchos ejemplos, por lo que te conviene desarrollar buenos hábitos ahorita que estás iniciando en la programación de computadoras.
El estándar de almacenamiento.
Como puedes observar en la figura 5, los tipos char, float y double tienen un estándar asociado. En el caso de los tipos float y double se trata del estándar del IEE 754, el cual define:
“formatos para la representación de números en coma flotante (incluyendo el cero) y valores desnormalizados, así como valores especiales como infinito y NaN, con un conjunto de operaciones en coma flotante que trabaja sobre estos valores. También especifica cuatro modos de redondeo y cinco excepciones (incluyendo cuándo ocurren dichas excepciones y qué sucede en esos momentos)” [Wikipedia]
El hecho que los tipos float y double de Java se rijan bajo este estándar, asegura una representación apropiada de los datos, utilizando las capacidades de los microprocesadores. Esto a la larga influye en el rendimiento y eficiencia de los programas escritos en Java.
Por otro lado,
“Unicode es un estándar de codificación de caracteres diseñado para facilitar el tratamiento informático, transmisión y visualización de textos de múltiples lenguajes y disciplinas técnicas, además de textos clásicos de lenguas muertas” [Wikipedia]
Unicode está sincronizado con el estándar ISO/IEC también conocido como UCS o conjunto universal de caracteres. Aún es un estándar en evolución, es un gran proyecto para remplazar otros esquemas de codificación de caracteres.
Esto es todo por el momento, una vez más espero que esta información te sea útil; compártelo con quien lo necesite. ¡Hasta el siguiente post!
Dania Garcia Montiel 1° A TIDSM