1. Lista de tipos primitivos

Java tiene 8 tipos primitivos básicos. Se llaman primitivos porque los valores de estos tipos no son objetos y se almacenan directamente dentro de las variables.

Aquí hay una tabla con una breve información sobre estos tipos:

Tipo Tamaño
en bytes
Rango de valores Valor por defecto Descripción
byte 1 -128 .. 127 0 El tipo entero más pequeño es un solo byte
short 2 -32.768 .. 32.767 0 Entero corto, dos bytes
int 4 -2*10 9 .. 2*10 9 0 Entero, 4 bytes
long 8 -9*10 18 .. 9*10 18 0L Entero largo, 8 bytes
float 4 -10 38 .. 10 38 0.0f Número de punto flotante, 4 bytes
double 8 -10 308 .. 10 308 0.0d Número de coma flotante de precisión doble, 8 bytes
boolean 1 true,false false Tipo booleano (solo truey false)
char 2 0 .. 65.535 '\u0000' Caracteres, 2 bytes, todos mayores que 0
Valor por defecto

Por cierto, aquí hay un matiz importante. Si declara una variable de instancia (campo) o una variable de clase estática y no le asigna ningún valor inmediatamente, entonces se inicializa con un valor predeterminado . La tabla presenta una lista de estos valores.

Las variables locales en un método no tienen valor predeterminado. Si no asigna un valor a tales variables, se consideran no inicializadas y no se pueden utilizar.

Pero volvamos a los tipos primitivos y echemos un vistazo más de cerca.



2. Tipos enteros

Java tiene 4 tipos de enteros : byte, shorty int. longSe diferencian en su tamaño y en el rango de valores que pueden almacenar.

inttipo

El más utilizado es el inttipo. El nombre proviene de la palabra int eger (número entero). Todos los literales enteros (números enteros) en el código son ints(si no terminan en L, Fo D).

Las variables de este tipo pueden tomar valores desde -2,147,483,648hasta +2,147,483,647.

Eso es mucho y es suficiente para casi todas las ocasiones. Casi todas las funciones que devuelven un número devuelven un int.

Ejemplos:

Código Explicación
int n = "String".length();
El length()método devuelve la longitud de una cadena.
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
El lengthcampo contiene la longitud de la matriz.

shorttipo

El shorttipo recibe su nombre de short int. A menudo también se le llama entero corto . A diferencia del inttipo, su longitud es de solo dos bytes y el rango de valores posibles es de -32,768a +32,767.

Eso significa que no puede almacenar el número un millón en él. O incluso 50.000. Este es el tipo entero que se usa con menos frecuencia en Java. La principal motivación para usarlo es conservar la memoria.

Suponga que tiene una situación en la que sabe de antemano que trabajará con valores que nunca superan los 30.000, y habrá millones de estos valores.

Por ejemplo, supongamos que está escribiendo una aplicación que procesa imágenes de ultra alta definición que utilizan 10-bits por color. Y tienes un millón de píxeles en tu imagen. Este es un escenario donde la decisión de usar into shortimporta.

longtipo

Este tipo recibe su nombre long inty también se le llama entero largo . A diferencia del inttipo, tiene un rango de valores fabulosamente enorme: de a .-9*1018+9*1018

¿Por qué no es el tipo entero básico?

Porque Java apareció a mediados de los 90, cuando la mayoría de las computadoras eran de 32 bits. Eso significa que todos los procesadores fueron optimizados para trabajar con números de 32 bits. Los procesadores podían trabajar con enteros de 64 bits, pero las operaciones con ellos eran más lentas.

Como resultado, los programadores razonablemente decidieron hacer intel tipo entero estándar y usar el longtipo solo cuando fuera realmente necesario.

bytetipo

Este es el tipo entero más pequeño en Java, pero está lejos de ser el menos utilizado. Su nombre, byte, es también la palabra para el bloque de memoria direccionable más pequeño en Java.

No hay tantos valores válidos para el bytetipo: from -128to +127. Pero ese no es su punto fuerte. El bytetipo se usa con mayor frecuencia cuando necesita almacenar una gran cantidad de datos de blobs en la memoria. Una matriz de bytes es ideal para este propósito.

Suponga que necesita copiar un archivo en alguna parte.

No necesita procesar el contenido del archivo: solo desea crear un área de memoria (búfer), copiar el contenido del archivo en él y luego escribir esos datos del búfer en otro archivo. Una bytematriz es lo que necesitas para esto.

Tenga en cuenta que una variable de matriz solo almacena una referencia a un área de memoria. Cuando la variable se pasa a algún método, solo se pasa la dirección de memoria. El bloque de memoria en sí no se copia.

byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
   int size = sourceFile.read(buffer); // Read data from a file into a buffer
   destFile.write(buffer, 0, size); // Write data from the buffer to a file

   // Stop copying if the buffer is not full
   if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();


3. Tipos reales

Los tipos primitivos incluyen dos tipos para números reales. Aunque no es del todo exacto usar ese término. Cuando las computadoras manejan números reales, los llamamos números de punto flotante . El nombre proviene de un estándar para representar números, en el que las partes enteras y fraccionarias de un número están separadas por un punto (un punto, no una coma).

Alguna información útil:

Cada país tiene sus propios estándares para escribir números (¡sorpresa!).

Muchas personas están acostumbradas a usar puntos para separar miles y comas como separador decimal: por ejemplo, escribirían one million ones and 153 thousandthscomo 1.000.000,153. Pero en los Estados Unidos, donde vivían los creadores de Java, se adoptó un estándar diferente:1000000.153

Java tiene dos tipos primitivos de coma flotante: doubley float.

Como dijimos anteriormente, estos tipos tienen una disposición interna muy específica: de hecho, dentro de cada variable de estos tipos no hay un número, sino dos:

Por ejemplo, el número de punto flotante 987654.321se puede representar como . Luego, en la memoria, se representará como dos números (la mantisa , es decir, la parte significativa del número) y ( el exponente , es decir, una potencia de diez)0.987654321*1069876543216

floattipo

El nombre del floattipo proviene de número de coma flotante . El tamaño de este tipo es bastante pequeño, solo 4 bytes (32 bits), pero puede almacenar valores desde hasta . Se asignan 24 bits para representar la mantisa y 8 bits para el exponente. Este tipo es capaz de almacenar solo 8 dígitos significativos.-3.4*10383.4*1038

Este enfoque hace posible almacenar números mucho más grandes que un int, mientras usa los mismos 4 bytes. Pero para hacerlo, sacrificamos la precisión. Debido a que parte de la memoria almacena la mantisa, estas variables almacenan solo 6-7 lugares decimales mientras que el resto se descarta.

Ejemplo:

Código Valor
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

Como puede ver, el principal inconveniente de este tipo es el número muy pequeño de dígitos significativos y la pérdida de precisión a partir del octavo dígito. Es por eso que el floattipo no es muy popular entre los programadores de Java.

doubletipo

El doubletipo es el tipo de punto flotante estándar. El nombre proviene del número de punto flotante de doble precisión . Todos los literales reales son doubles por defecto.

Este tipo ocupa 8 bytes de memoria (64 bits) y puede almacenar valores desde hasta . Una cosa importante que debe saber es que se asignan 53 bits para la mantisa, mientras que los 11 restantes son para el exponente.-1.7*103081.7*10308

Esto permite almacenar de 15 a 17 dígitos significativos.

Ejemplo:

Código Valor
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

Esta precisión, especialmente en comparación con el floattipo, es decisiva: el 99% de todas las operaciones con números reales se realizan utilizando el doubletipo.

11los bits se asignan para el exponente, lo que significa que puede almacenar potencias de diez de -323a +308(eso es una potencia de dos de -1024a +1023). El doubletipo puede almacenar fácilmente un número con cientos de ceros después del punto decimal:

Código Valor
double a = 2E-300 * 3E+302
600.0


4. infinito

Los números de punto flotante tienen otra característica interesante: pueden almacenar un valor especial que denota infinito . Y puedes representar el infinito positivo y el infinito negativo .

Ejemplos:

Código Nota
System.out.println( 100.0 / 0.0 );
Infinity
System.out.println( -100.0 / 0.0 );
-Infinity
double a = 1d / 0d;
double b = a * 10;
double c = b - 100;
a == Infinity
b == Infinity
c == Infinity

Si infinito se multiplica por un número, se obtiene infinito. Si sumas un número a infinito, obtienes infinito. Eso es muy conveniente.

No es un número ( NaN)

Cualquier operación que involucre infinito produce infinito. Bueno, la mayoría pero no todos.

Los números de coma flotante pueden almacenar otro valor especial: NaN. Es la abreviatura de N ot a N úmero (no es un número).

En matemáticas, si divides infinito por infinito, el resultado es indefinido.

Pero, en Java, si divides infinito por infinito, el resultado es NaN.

Ejemplos:

Código Nota
System.out.println(0.0 / 0.0);
NaN
double infinity = 1d / 0d;
System.out.println(infinity / infinity);

NaN
double a = 0.0 / 0.0;
double b = a * 10;
double c = b - 100;
double d = a + infinity;
a == NaN
b == NaN
c == NaN
d == NaN

Cualquier operación con NaNrendimientos NaN.



5. chartipo

Entre los tipos primitivos de Javachar , uno merece una atención especial: el tipo. Su nombre proviene de la palabra carácter , y el tipo en sí se usa para almacenar caracteres.

Los caracteres son de lo que están hechas las cadenas, ¿verdad? Las cadenas son una matriz de caracteres.

¡Pero aún más interesante es el hecho de que el chartipo también es un tipo numérico ! Es un tipo de doble propósito, por así decirlo.

La realidad es que el chartipo en realidad no tiene personajes. En su lugar, almacena códigos de caracteres de la codificación Unicode. Cada carácter corresponde a un número: el código numérico del carácter.

Cada charvariable ocupa dos bytes en memoria (lo mismo que el shorttipo). Pero a diferencia del shorttipo, el chartipo entero no tiene signo y puede almacenar valores desde 0hasta 65,535.

El chartipo es un tipo híbrido. Sus valores se pueden interpretar como números (por ejemplo, se pueden sumar y multiplicar) y como caracteres. Esto se hizo porque si bien los caracteres son representaciones visuales, para una computadora son ante todo números. Y es mucho más conveniente trabajar con ellos como números.

Unicode

Unicode es una tabla especial (codificación) que contiene todos los caracteres del mundo. Y cada personaje tiene su propio número. Se ve aproximadamente así:

Tipos primitivos en Java

Hay diferentes formas de asignar un valor a una charvariable.

Código Descripción
char a = 'A';
La avariable contendrá la letra latina A.
char a = 65;
La avariable contendrá la letra latina A. Su código es 65.
char a = 0x41;
La avariable contendrá la letra latina A.
Su código es 65, que equivale 41en sistema hexadecimal.
char a = 0x0041;
La avariable contendrá la letra latina A.
Su código es 65, que equivale 41en sistema hexadecimal.
Los dos ceros extra no cambian nada.
char a = '\u0041';
La avariable contendrá la letra latina A.
Otra forma de definir un personaje por su código.

La mayoría de las veces, las personas simplemente indican el carácter entre comillas (como en la primera fila de la tabla). Dicho esto, el último método también es popular. Su ventaja es que se puede utilizar en cadenas.

Y como dijimos, el chartipo también es un tipo entero, por lo que puedes escribir algo como esto:

Código Salida de consola
char a = 'A';
a++;
System.out.println(a);
La letra latina Bse mostrará en la pantalla.
Porque:
A65
B66
C67

Trabajando con chars

Cada uno chares en primer lugar un número (código de carácter), y luego un carácter. Si conoce un código de carácter, siempre puede obtener el carácter en su programa. Ejemplo:

Código Salida de consola
char c = (char) 1128;
System.out.println(c);

Ѩ

Códigos estándar

Estos son los códigos de caracteres más conocidos:

Caracteres Códigos
0, 1, 2, ...9 48, 49, 50, ...57
a, b, c, ...z 97, 98, 99, ...122
A, B, C, ...Z 65, 66, 67, ...90


6. booleantipo

Y el último tipo primitivo es boolean.

Como ya sabes, solo puede tomar dos valores: truey false.

Y con eso, ya sabes todo lo que hay que saber sobre este tipo.