Junior
¿Qué son los tipos de datos de referencia?
sobes.tech AI
Respuesta de la IA
Los tipos de datos de referencia almacenan no el valor en sí, sino una referencia (dirección en memoria) al lugar donde se encuentra ese valor.
Características:
- Las variables de tipo referencia pueden almacenar una referencia a
null. - Al asignar el valor de una variable de tipo referencia a otra, no se copia el valor en sí, sino la referencia. Ambas variables apuntan al mismo lugar en memoria.
- Los cambios realizados a través de una referencia serán visibles a través de la otra, si ambas apuntan al mismo objeto.
- La memoria para objetos de tipos de referencia es gestionada por el recolector de basura.
Ejemplos de tipos de datos de referencia:
- Cadenas (
String) - Arreglos
- Objetos de clases personalizadas
- Delegados (en algunos lenguajes)
Diferencias con los tipos de datos de valor:
| Característica | Tipos de datos de valor | Tipos de datos de referencia |
|---|---|---|
| Almacenamiento | El valor en sí mismo | Una referencia al valor |
| Copia | Se copia el valor en sí | Se copia la referencia |
| Modificación | Los cambios en la copia no afectan al original | Los cambios a través de una referencia son visibles en la otra (si ambas apuntan al mismo objeto) |
| Memoria | Gestionada por la pila (normalmente) | Gestionada por el montón, liberada por el recolector de basura |
| Ejemplos | int, float, bool, struct (en algunos lenguajes) |
String, Array, Object |
// Ejemplo en C#
string s1 = "Hello"; // s1 almacena una referencia a la cadena "Hello"
string s2 = s1; // s2 ahora almacena la misma referencia que s1
// Al cambiar, no será visible a través de la otra referencia,
// porque las cadenas en C# son inmutables.
// Al cambiar, se crea una nueva cadena y se reasigna la referencia.
s1 = "World";
Console.WriteLine(s2); // Muestra "Hello"
int[] arr1 = { 1, 2, 3 }; // arr1 almacena una referencia a un arreglo {1, 2, 3}
int[] arr2 = arr1; // arr2 ahora almacena la misma referencia
arr2[0] = 10; // Cambio a través de arr2
Console.WriteLine(arr1[0]); // Muestra 10, el cambio es visible a través de arr1
// Ejemplo en Java
String s1 = "Hello"; // s1 almacena una referencia a la cadena "Hello"
String s2 = s1; // s2 ahora almacena la misma referencia que s1
// Las cadenas en Java son inmutables.
// Al cambiar, se crea una nueva cadena y se reasigna la referencia.
s1 = "World";
System.out.println(s2); // Muestra "Hello"
int[] arr1 = { 1, 2, 3 }; // arr1 almacena una referencia a un arreglo {1, 2, 3}
int[] arr2 = arr1; // arr2 ahora almacena la misma referencia
arr2[0] = 10; // Cambio a través de arr2
System.out.println(arr1[0]); // Muestra 10, el cambio es visible a través de arr1