Intern
¿Cuál es la diferencia entre tipos de datos primitivos y de referencia?
sobes.tech AI
Respuesta de la IA
Los tipos primitivos almacenan directamente el valor, mientras que los tipos de referencia almacenan una referencia (dirección en memoria) al objeto que contiene el valor.
Tipos primitivos:
- Ocupan un tamaño fijo y pequeño en memoria.
- Se transmiten por valor (se copia el valor mismo).
- Comienzan con minúscula.
- Incluyen:
byte,short,int,long,float,double,boolean,char.
// Ejemplo de tipo primitivo
int a = 10;
int b = a; // Se copia el valor 10
b = 20; // Solo cambia b, a sigue siendo 10
Tipos de referencia:
- Ocupan diferentes cantidades de memoria, dependiendo del contenido del objeto.
- Se transmiten por referencia (se copia la dirección del objeto). Cambiar el objeto a través de la referencia afecta a todas las variables que lo apuntan.
- Generalmente comienzan con mayúscula (clases).
- Incluyen: clases (
String,Object, clases personalizadas), interfaces, arreglos.
// Ejemplo de tipo de referencia
String str1 = new String("Hello");
String str2 = str1; // Se copia la referencia al objeto "Hello"
str2 = "World"; // str2 ahora apunta a un nuevo objeto "World". str1 sigue apuntando a "Hello".
// Otro ejemplo con un objeto mutable
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Se copia la referencia al mismo objeto ArrayList
list2.add(2); // Añadimos un elemento al objeto accesible desde ambas referencias
// Ahora, list1 contiene [1, 2] y list2 también contiene [1, 2]
Tabla comparativa rápida:
| Propiedad | Tipos primitivos | Tipos de referencia |
|---|---|---|
| Almacenamiento | Valor | Referencia al objeto |
| Transmisión | Por valor | Por referencia |
| Tamaño de memoria | Fijo y pequeño | Variable |
| Comienzo con | Minúscula | Generalmente con mayúscula |
| Nullable | No pueden ser null |
Pueden ser null |
Los tipos primitivos se envuelven en clases envolventes (clases wrapper) para trabajar con ellos como objetos (por ejemplo, int en Integer).