Tipos de datos básicos de Java

Una variable es solicitar memoria para almacenar valores. Es decir, cuando se crea una variable, es necesario solicitar espacio en la memoria.

El sistema de gestión de memoria asigna espacio de almacenamiento a la variable según su tipo, y el espacio asignado solo puede utilizarse para almacenar datos de ese tipo.

Por lo tanto, al definir variables de diferentes tipos, se pueden almacenar enteros, decimales o caracteres en la memoria.

Los dos grandes tipos de datos de Java:

  • Tipos de datos integrados
  • Tipos de datos de referencia

Tipos de datos integrados

El lenguaje Java proporciona ocho tipos básicos. Seis tipos numéricos (cuatro enteros, dos de coma flotante), un tipo de carácter y un tipo booleano.

byte:

  • El tipo de datos byte es un entero de 8 bits, con signo, representado en complemento a dos;
  • El valor mínimo es-128(-2^7);
  • El valor máximo es127(2^7-1);
  • El valor por defecto es0;
  • El tipo byte se utiliza en arrays grandes para ahorrar espacio, principalmente en lugar de enteros, porque el espacio que ocupa una variable byte es solo una cuarta parte del tipo int;
  • Ejemplo: byte a = 100, byte b = -50.

short:

  • El tipo de datos short es un entero de 16 bits, con signo, representado en complemento a dos.
  • El valor mínimo es-32768(-2^15);
  • El valor máximo es32767(2^15 - 1);
  • El tipo de datos Short también puede ahorrar espacio como byte. Una variable short ocupa la mitad del espacio que ocupa una variable de tipo int;
  • El valor por defecto es0;
  • Ejemplo: short s = 1000, short r = -20000.

int:

  • El tipo de datos int es un entero de 32 bits, con signo, representado en complemento a dos;
  • El valor mínimo es-2,147,483,648(-2^31);
  • El valor máximo es2,147,483,647(2^31 - 1);
  • Generalmente, las variables enteras son de tipo int por defecto;
  • El valor por defecto es0 ;
  • Ejemplo: int a = 100000, int b = -200000.

long:

  • El tipo de datos long es un entero de 64 bits, con signo, representado en complemento a dos;
  • El valor mínimo es-9,223,372,036,854,775,808(-2^63);
  • El valor máximo es9,223,372,036,854,775,807(2^63 -1);
  • Este tipo se utiliza principalmente en sistemas que necesitan enteros grandes;
  • El valor por defecto es0L;
  • Ejemplo:long a = 100000L,long b = -200000L。
    En teoría, la 'L' no distingue entre mayúsculas y minúsculas, pero si se escribe como 'l', es fácil confundirla con el número '1', no es fácil de distinguir. Por lo tanto, es mejor usar mayúscula.

float:

  • El tipo de datos float es un número de coma flotante de precisión simple, de 32 bits, que cumple con el estándar IEEE 754;
  • float puede ahorrar espacio de memoria al almacenar grandes arrays de coma flotante;
  • El valor por defecto es0.0f;
  • Los números de coma flotante no se pueden usar para representar valores exactos, como moneda;
  • Ejemplo: float f1 = 234.5f.

double:

  • El tipo de datos double es un número de coma flotante de doble precisión, de 64 bits, que cumple con el estándar IEEE 754;
  • El tipo predeterminado de los números de coma flotante es double;
  • El tipo double tampoco puede representar valores exactos, como moneda;
  • El valor por defecto es0.0d;
  • Ejemplo:

    double   d1  = 7D ;
    double   d2  = 7.; 
    double   d3  =  8.0; 
    double   d4  =  8.D; 
    double   d5  =  12.9867; 

    7 es un literal int, mientras que 7D, 7. y 8.0 son literales double.

boolean:

  • El tipo de datos boolean representa información de un bit;
  • Solo tiene dos valores: true y false;
  • Este tipo se usa solo como un indicador para registrar situaciones true/false;
  • El valor por defecto esfalse;
  • Ejemplo: boolean one = true.

char:

  • El tipo char es un único carácter Unicode de 16 bits;
  • El valor mínimo es\u0000(el valor equivalente en decimal es 0);
  • El valor máximo es\uffff(es decir, 65535);
  • El tipo de datos char puede almacenar cualquier carácter;
  • Ejemplo: char letter = 'A';.

Ejemplo

No es necesario memorizar forzosamente el rango de valores de los tipos básicos numéricos, porque sus valores ya están definidos como constantes en las clases wrapper correspondientes. Vea el siguiente ejemplo:

Ejemplo

public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("Tipo básico: byte, número de bits binarios:" + Byte.SIZE); System.out.println("Clase wrapper: java.lang.Byte"); System.out.println("Valor mínimo: Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("Valor máximo: Byte.MAX_VALUE=" + Byte.MAX_VALUE); System.out.println(); // short System.out.println("Tipo básico: short, número de bits binarios:" + Short.SIZE); System.out.println("Clase wrapper: java.lang.Short"); System.out.println("Valor mínimo: Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("Valor máximo: Short.MAX_VALUE=" + Short.MAX_VALUE); System.out.println(); // int System.out.println("Tipo básico: int, número de bits binarios:" + Integer.SIZE); System.out.println("Clase wrapper: java.lang.Integer"); System.out.println("Valor mínimo: Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("Valor máximo: Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); // long System.out.println("Tipo básico: long, número de bits binarios:" + Long.SIZE); System.out.println("Clase wrapper: java.lang.Long"); System.out.println("Valor mínimo: Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("Valor máximo: Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); // float System.out.println("Tipo básico: float, número de bits binarios:" + Float.SIZE); System.out.println("Clase wrapper: java.lang.Float"); System.out.println("Valor mínimo: Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("Valor máximo: Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); // double System.out.println("Tipo básico: double, número de bits binarios:" + Double.SIZE); System.out.println("Clase wrapper: java.lang.Double"); System.out.println("Valor mínimo: Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("Valor máximo: Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); // char System.out.println("Tipo básico: char, número de bits binarios:" + Character.SIZE); System.out.println("Clase wrapper: java.lang.Character"); //Salida a la consola de Character.MIN_VALUE en forma numérica en lugar de forma de carácter System.out.println("Valor mínimo: Character.MIN_VALUE=" + (int) Character.MIN_VALUE); //Salida a la consola de Character.MAX_VALUE en forma numérica en lugar de forma de carácter System.out.println("Valor máximo: Character.MAX_VALUE=" + (int) Character.MAX_VALUE); } }

Ejecutar el ejemplo »

Al compilar el código anterior, el resultado se muestra a continuación:

基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127

基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767

基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647

基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807

基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38

基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308

基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535

Los valores mínimo y máximo de Float y Double se muestran en notación científica. El 'E+número' al final indica cuántas veces 10 hay que multiplicar por el número antes de E. Por ejemplo, 3.14E3 es 3.14 × 103=3140, 3.14E-3 es 3.14 x 10-3 =0.00314.

En realidad, en Java también existe otro tipo básico, void, que también tiene su clase wrapper correspondiente, java.lang.Void, aunque no podemos operar directamente sobre ellos.

Valores por defecto de los tipos

La siguiente tabla enumera los valores por defecto de cada tipo de Java:

Tipo de datosValor por defecto
int0
long0L
short0
char'\u0000'
byte0
float0.0f
double0.0d
booleanfalse
Tipos de referencia (clase, interfaz, array)null

Explicación:

  • int, short, long, byteEl valor por defecto es 0.
  • charEl valor por defecto es\u0000(carácter nulo).
  • floatEl valor por defecto es0.0f。
  • doubleEl valor por defecto es0.0d。
  • booleanEl valor por defecto esfalse。
  • El valor por defecto de los tipos de referencia (clase, interfaz, array) esnull。

Ejemplo

public class Test { static boolean bool; static byte by; static char ch; static double d; static float f; static int i; static long l; static short sh; static String str; public static void main(String[] args) { System.out.println("Bool :" + bool); System.out.println("Byte :" + by); System.out.println("Character:" + ch); System.out.println("Double :" + d); System.out.println("Float :" + f); System.out.println("Integer :" + i); System.out.println("Long :" + l); System.out.println("Short :" + sh); System.out.println("String :" + str); } }

El resultado de salida del ejemplo es:

Bool     :false
Byte     :0
Character:
Double   :0.0
Float    :0.0
Integer  :0
Long     :0
Short    :0
String   :null

Tipos de referencia

  • En Java, las variables de tipo de referencia son muy similares a los punteros de C/C++. Un tipo de referencia apunta a un objeto; la variable que apunta al objeto es una variable de referencia. Estas variables se especifican con un tipo concreto en el momento de la declaración, como Employee, Puppy, etc. Una vez que la variable se declara, su tipo no se puede cambiar.
  • Los objetos y los arrays son tipos de datos de referencia.
  • El valor por defecto de todos los tipos de referencia es null.
  • Una variable de referencia se puede utilizar para referenciar cualquier tipo compatible con ella.
  • Ejemplo: Site site = new Site("Ejemplo").

Constantes de Java

Las constantes no se pueden modificar durante la ejecución del programa.

En Java, se usa la palabra clave final para modificar constantes. La forma de declaración es similar a la de las variables:

final double PI = 3.1415927;

Aunque los nombres de constantes también pueden ser en minúsculas, para facilitar su identificación, normalmente se usan letras mayúsculas para las constantes.

Los literales se pueden asignar a variables de cualquier tipo incorporado. Por ejemplo:

byte a = 68;
char a = 'A'

byte, int, long y short se pueden representar en decimal, hexadecimal y octal.

Al usar literales, el prefijo0indica octal, y el prefijo0xrepresenta hexadecimal, por ejemplo:

int decimal = 100;
int octal = 0144;
int hexa =  0x64;

Como en otros lenguajes, las constantes de cadena de Java son también secuencias de caracteres entre dos comillas. A continuación se muestran ejemplos de literales de cadena:

"Hello World"
"two\nlines"
"\"This is in quotes\""

Las constantes de cadena y las variables de carácter pueden contener cualquier carácter Unicode. Por ejemplo:

char a = '\u0001';
String a = "\u0001";

El lenguaje Java admite algunas secuencias especiales de caracteres de escape.

Símbolo Significado del carácter
\n Salto de línea (0x0a)
\r Retorno de carro (0x0d)
\f Salto de página (0x0c)
\b Retroceso (0x08)
\0 Carácter nulo (0x0)
\s Espacio (0x20)
\t Tabulador
\" Comillas dobles
\' Comillas simples
\\ Barra invertida
\ddd Carácter octal (ddd)
\uxxxx Carácter Unicode hexadecimal (xxxx)

Conversión automática de tipos

Los datos enteros, reales (constantes) y de carácter se pueden mezclar en operaciones. Durante las operaciones, los datos de diferentes tipos se convierten primero al mismo tipo y luego se realiza la operación.

La conversión va de nivel bajo a nivel alto.

低  ------------------------------------>  高

byte,short,char—> int —> long—> float —> double 

La conversión de tipos debe cumplir las siguientes reglas:

  • 1. No se puede realizar conversión de tipos sobre el tipo boolean.

  • 2. No se puede convertir un tipo de objeto a un objeto de una clase no relacionada.

  • 3. Al convertir un tipo de gran capacidad a un tipo de pequeña capacidad, se debe usar una conversión forzada de tipos.

  • 4. El proceso de conversión puede causar desbordamiento o pérdida de precisión, por ejemplo:

    int i =128;   
    byte b = (byte)i;
    

    Debido a que el tipo byte es de 8 bits y su valor máximo es 127, cuando se convierte int forzosamente a byte, el valor 128 causará desbordamiento.

  • 5. La conversión de punto flotante a entero se obtiene descartando la parte decimal, no redondeando, por ejemplo:

    (int)23.7 == 23;        
    (int)-45.89f == -45
    

Conversión automática de tipos

Debe cumplir que el número de bits del tipo de datos antes de la conversión sea menor que el del tipo de datos después de la conversión. Por ejemplo: el tipo de datos short tiene 16 bits y puede convertirse automáticamente al tipo int con 32 bits; de igual forma, el tipo de datos float tiene 32 bits y puede convertirse automáticamente al tipo double con 64 bits.

Ejemplo

public class ZiDongLeiZhuan{ public static void main(String[] args){ char c1='a';//Definir un tipo char int i1 = c1;//char se convierte automáticamente a int System.out.println("El valor de char después de la conversión automática a int es igual a"+i1); char c2 = 'A';//Definir un tipo char int i2 = c2+1;//Cálculo entre el tipo char y el tipo int System.out.println("El valor después del cálculo entre char e int es igual a"+i2); } }

El resultado de la ejecución es:

char自动类型转换为int后的值等于97
char类型和int计算后的值等于66

Análisis:El valor de c1 es el carácteraAl consultar la tabla ASCII, sabemos que el valor int correspondiente es 97, y el valor correspondiente para A es 65, por lo tantoi2=65+1=66。

Conversión forzada de tipos

  • 1. La condición es que el tipo de datos a convertir debe ser compatible.

  • 2. Formato: (type)value type es el tipo de datos después de la conversión forzada Ejemplo:

    Ejemplo

    public class ForceTransform { public static void main(String[] args){ int i1 = 123; byte b = (byte)i1;//Conversión forzada a byte System.out.println("El valor después de la conversión forzada de int a byte es igual a"+b); } }

    Resultado de la ejecución:

    int强制类型转换为byte后的值等于123
    

Conversión implícita de tipos

  • 1. El tipo predeterminado para enteros es int.

  • 2. Los decimales son por defecto de tipo punto flotante double; al definir un tipo float, se debe agregar F o f después del número.

Esta sección explicó los tipos de datos básicos de Java. La siguiente sección explorará los diferentes tipos de variables y su uso.

Otras extensiones