Los tipos primitivos tienen valores predeterminados, mientras que los tipos contenedores son inicialmente nulos. Luego use estas dos características para diferentes negocios. Según las especificaciones de Alibaba, todas las clases POJO deben usar tipos de paquete y se recomienda usar tipos básicos para variables locales.
El lenguaje Java proporciona ocho tipos básicos. Seis tipos numéricos (cuatro enteros, dos tipos de punto flotante), un tipo de carácter y un tipo booleano.
1. Entero: incluido int, short, byte, long, el valor inicial es 0.
2. Tipo de punto flotante: el valor inicial de flotante y doble es 0,0
3. Carácter: el valor inicial de char es un espacio, es decir, '' ". Si se genera, el efecto no será visible en la consola.
4. Booleano: el valor inicial booleano es falso
tipo básico | tamaño | valor mínimo | valor máximo |
booleano | ----- | ----- | ------ |
carbonizarse | 16 bits | Unicódigo 0 | Unicódigo 2^16-1 |
byte | 8 bits | -128 | +127 |
corto | 16 bits | -2^15 | +2^15-1 |
En t | 32 bits | -2^31 | +2^31-1 |
largo | 64 bits | -2^63 | +2^63-1 |
flotar | 32 bits | IEEE754 | IEEE754 |
doble | 64 bits | IEEE754 | IEEE754 |
vacío |
Aviso:
El ^ en la tabla representa el poder.
Java usa Unicode, 2 bytes representan un carácter y 1 byte equivale a 16 bits.
Tipo básico de clase contenedora
Entero, Largo, Corto, Byte, Carácter, Doble, Flotante, Booleano, BigInteger, BigDecmail
Entre ellos, BigInteger y BigDecimal no tienen tipos básicos correspondientes y se utilizan principalmente para operaciones de alta precisión. BigInteger admite números enteros de precisión arbitraria.
BigDecimal admite operaciones de precisión arbitraria con punto decimal
Tipos básicos: int, double, float, long, byte, boolean , char
Tipos de empaquetado: entero, Double, Float, Long, Byte, Boolean, CharCaracterísticas de los tipos básicos.
1. Los tipos de datos básicos utilizan la transferencia de valores al pasar parámetros.
2. Los tipos básicos se crean en la pila (hay un problema de fuga)
3. La creación no se hace a través de lo nuevo.
Características de los tipos de paquetes.
1. Crear a través de nuevo o asignar directamente.
2. Al pasar parámetros, utilizamos "pasar por referencia", que es el método de paso de direcciones.
3. La creación se crea en el montón.
4. El valor de la clase contenedora del tipo de datos es inmutable.
Ventajas de los tipos de paquetes:
Para crear un tipo de paquete, puede utilizar algunos métodos que el tipo básico no tiene, como valueOf(), toString(), etc. Además, si desea pasar una referencia a un objeto int en lugar de un valor, solo puede usar una clase contenedora.
Similitudes y diferencias entre tipos básicos y tipos de paquetes :
1. En Java, todo es un objeto, pero los ocho tipos básicos no son objetos.
2. Diferentes métodos de declaración: los tipos básicos no necesitan crearse mediante la nueva palabra clave, mientras que los tipos encapsulados requieren la nueva palabra clave.
3. El método de almacenamiento y la ubicación son diferentes: el tipo básico almacena directamente el valor de la variable, a la que se puede acceder de manera eficiente guardándola en la pila, el tipo encapsulado debe apuntar a la instancia a través de una referencia, y la instancia específica se guarda en el montón;
4. El valor inicial es diferente: el valor inicial del tipo encapsulado es nulo y el valor inicial del tipo básico depende del tipo específico. Por ejemplo, el valor inicial del tipo int es 0 y el tipo booleano es FALSO;
5. Diferentes métodos de uso. Por ejemplo, cuando se trabaja con clases de colección, solo se pueden usar tipos de empaque.
6. ¿Cuándo debería usar una clase contenedora y cuándo debería usar un tipo básico? Depende del negocio básico: si se permiten valores nulos en este campo, si está permitido, debe usar una clase contenedora; de lo contrario, el tipo básico será suficiente. Si usa funciones como genéricas y reflexión, ¡necesita usar una clase contenedora!
Código fuente
Eche un vistazo Boolean
a las propiedades y al constructor para ver cómo se ajusta. boolean
// final boolean类型的属性,通过构造方法注入值
private final boolean value;
// 构造方法 Boolean a = true 实际上就是调用这个方法
public Boolean(boolean value) {
this.value = value;
}
// 构造方法
public Boolean(String s) {
this(parseBoolean(s));
}
En pocas palabras, los atributos definidos por booleano deben tener un valor. Si Boolean
el valor del objeto es null
, se producirá NPE durante el proceso de descompresión.
Los tipos de datos básicos y los tipos de contenedor utilizan estándares
Nota:
El método de asignación de clases contenedoras es valueof, pero a partir de Java 5.0 (1.5), la máquina virtual JAVA (máquina virtual Java) puede completar la conversión automática entre tipos básicos y sus clases contenedoras correspondientes. Por lo tanto, usamos sus clases contenedoras como tipos básicos al realizar asignaciones, transferencias de parámetros y operaciones matemáticas, pero esto no significa que pueda llamar a métodos que solo están disponibles en sus clases contenedoras a través de tipos básicos. Además, las clases contenedoras de todos los tipos básicos (incluido void) utilizan modificación final, por lo que no podemos heredarlas para extender nuevas clases, ni podemos anular ninguno de sus métodos.
Eche un vistazo al código fuente de valueof para comprender el mecanismo de almacenamiento en caché.
public static Integer valueOf(int i) {
assert IntegerCache.high>= 127;
if (i >= IntegerCache.low&& i <= IntegerCache.high)
return IntegerCache.cache[i+ (-IntegerCache.low)];
return new Integer(i);
}
El rango de valores de caché de cada clase de empaquetado:
booleano: verdadero y falso
byte: -128~127
char: 0~127
short: -128~127
int: -128~127
long: -128~127
float y double no se almacenan en caché
El valor dentro del rango de caché equivale a un espacio que se ha abierto o un objeto que ha sido nuevo.