Sobes.tech
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