Capitulo 4 – Trabajando con las Clases Básicas y Variables (Parte I)

Hoy comenzamos con el Capitulo 4, en el cual describiremos, compararemos y contrastaremos los tipos de dato primitivos (integer, floating point, boolean y character), las enumeraciones y los objetos.

Una aplicación está elaborada por variables que guardan información y el código del programa manipula esta información. Estos datos primitivos (a partir de ahora los llamaremos primitives) son usados para crear tipos de datos mas avanzados llamados Objetos.

Esto es lo que hace que Java sea un lenguaje orientado a objetos.

Es un concepto fundamental muy importante que debemos entender para saber eralmente como funciona el lenguaje Java.

En este capítulo cubriremos las necesidades básicas de las variables primitive y los objetos.
Veremos las siguienets secciones:

  • Primitives (Parte I)
  • Objects (Parte II)
  • Arrays (Parte III)
  • Enumerations (Parte III)
  • Java’s Strongly typed nature (Parte III)
  • Naming Conventions (Parte III)

Primitives

Los tipos de dato primitive son un subset especial de tipos de datos de Java. Son los encargados de guardar datos en un programa. Es muy importante saber y entender que es un tipo de dato primitive y que no es. El lenguaje Java tiene 8 primitives. Lo importante de ellos es recordar para cada tipo de dato es que tipo de valor podemos guardar en ellos, el tamaño en memoria y el tamaño mínimo/máximo de sus valores.

¿Qué es un primitive?

Un tipo de dato primitive es la forma mas básica de dato en un programa de Java, de aquí su nombre. Cuando son declarados, estos reservan espacio en memoria. El tamaño en memoria depende del tipo de dato que se use.
Los cuatro tipos de dato que veremos serán int (integer, float (floating point), boolean (boolean) y char (character). Es importante recordar que algo representado en el código como Integer es diferente a int, ya que Integer se refiere a un Objeto.

Cuando estás trabajando con variables primitives, solo pueden asignarle valores o leer sus valores. Los cálculos realizados con variables primitivas son mas rápidos que los realizados con objetos similares, algo que deberemos tener en cuenta.
El siguiente código muestra un int siendo declarado:

int inchesOfRain;

La variable inchesOfRain está ahora declarada como un int. Esta variablesolo puede guardar enteros y no puede romperse en elementos mas pequeños. Una vez que la variable ha sido declarada, podemos trabajar con ella.
No se puede llamar métodos usando esta variable ya que es de tipo primitive, pero ya lo veremos mas adelante cuando exploremos los métodos.

inchesOfRain=2;
totalInchesOfRain += inchesOfRain;
-int

Un int es el tipo de dato primitive mas usado en Java. Una vez declarado, su valor por defecto es 0. Un entero ocupa 32 bits en memoria y puede guardar un número con signo sin puntos flotantes de 32-bit. Su valor máximo es 2.147.483.647 y su valor mínimo puede ser -2.147.483.648 inclusive.
El siguiente segmento de código demuestra el uso de un entero:

int x;
x=3;
int y=x;
int z=5+x;
-float

Un float es un tipo de dato primitive que se usa para guardar datos decimales. Su valor por defecto es 0.0f. Este valor es equivalente a 0, pero la “f” o “F” que aparece al final indica que es un valor float, no un double. Requieren 32 bits en memoria y pueden contener un valor de 32-bit con un máximo de 3.4e^38 y su mínimo positivo que no sea cero de 1.4e*-45 inclusive. Estos valores están redondeados por simplicidad.
Los siguientes segmentos de código demuestran el uso de un float (Se usa f o F para denotar que el número es float):

float a=0.2f;
float b=a;
a=5.0f;
a=10.5f;

//Un literal entero puede guardarse en un float sin tener que haberlo declarado
a=1118;
-boolean

El tipo de dato primitive boolean guarda un valor que solo puede ser true o false. Guarda un valor que ocupa 1 bit y por defecto se inicializa a false. Aunque esto representa 1 bit de información, su tamaño exacto no está definido en el Java Standard y puede ocupar mas en otras plataformas diferentes.

boolean isWorking=true;
isWorking=false;
-char

El tipo de dato primitive char es usado para guardar un carácter de 16 bit Unicode y requiere 16-bit de memoria. El rango que corresponde a un char desde el mínimo hasta el máximo es definido por la especificación Unicode ‘u0000’ (0) y ‘uffff’ (65536). Cuando un char se establece con un valor en el código, se debe usar comilla simple como por ejemplo ‘Y’. El valor por defecto de un char es ‘u0000’ o 0. Es el único dato de Java que no tiene signo.
El siguiente segmento de código demuestra el uso del char (el ‘u0046’ corresponde a la ‘F’):

char c = 'X';
char upperCaseF = 'u0046';
c = upperCaseF;

Primitives vs Their Wrapper Class

Hemos discutido que es un tipo de dato primitive en Java. Son la construcción básica en Java que no son objetos. Java tiene una Wrapper Class para cada tipo de dato primitive que puede convertirlos en un objeto. Las Wrapper Class son Integer, Float, Boolean, Character. Nótese que cada una de estas clases empiezan con una letra capital, mientras que los tipos de dato primitive están declaradas en minúscula. Si ves un tipo de dato Float, se está refiriendo a un objeto, mientras que un tipo de dato float se corresponde a un tipo de dato primitive.
Lo siguiente es un ejemplo de un objeto Integer siendo inicializado:

//Un integer es creado e inicializado a 5
Integer valueA = new Integer(5);

//Un int primitive recibe el valor guardado en el objeto Integer
int num = number.intValue();

//El autoboxig se usa para convertir un int a un Integer
Integer valueB = num;

Los valores de tipo primitivey sus objetos equivalentes pueden, en la mayoría de las casos, ser intercambiables.
Sin embargo, esta es una mala práctica. Cuando realizamos operaciones matemáticas, usando variables de tipo primitive resulta ser mucho mas rápido, además de consumir menos memoria o dejar huellas mas pequeñas en la memoria.

Aquí os dejo una tabla con los tipos de dato primitive que encontramos en java, incluidos los que no hemos explicado:

Data Type Used For Size Range
boolean true or false 1 bit NA
char Unicode character 16 bits u0000 to uFFFF (0 to 65535)
byte integer 8 bits -128 to 127
short integer 16 bits -32768 to 32767
int integer 32 bits -2.147.483.648 to 2.147.483.647
long integer 64 bits -2^63 to 2^63 -1
float floating point 32 bits positive 1.4e^-45 to 3.4e^+38
double floating point 64 bits positive 5e^-124 to 1.8e^+308

Hasta aquí el primer apartado del capitulo 4, he decidido dividirlo bien por 2 razones, una para no hacer una entrada demasiada larga, y otra para dividir el contenido, ya que son temas muy importantes y hay que entenderlos uno por uno, por eso, he visto conveniente dividir por un lado los tipos de dato primitive y por otro lado (en la parte II), los Objetos en java, que son, como se usan y que tenemos que saber de ellos.

Sin mas, hasta aquí esta parte, como digo siempre cualquier corrección o aporte son bienvenidos.

Saludos!!