Junior
O que são tipos de dados de referência?
sobes.tech IA
Resposta da IA
Os tipos de dados de referência armazenam não o valor em si, mas uma referência (endereço na memória) ao local onde esse valor se encontra.
Características:
- Variáveis de tipo referência podem armazenar uma referência a
null. - Ao atribuir o valor de uma variável de tipo referência a outra, não é copiado o valor em si, mas a referência. Ambas as variáveis apontam para o mesmo local na memória.
- As alterações feitas através de uma referência serão visíveis na outra, se ambas apontarem ao mesmo objeto.
- A memória para objetos de tipos de referência é gerida pelo coletor de lixo.
Exemplos de tipos de dados de referência:
- Strings (
String) - Arrays
- Objetos de classes personalizadas
- Delegados (em algumas linguagens)
Diferenças em relação aos tipos de dados de valor:
| Característica | Tipos de dados de valor | Tipos de dados de referência |
|---|---|---|
| Armazenamento | O valor em si próprio | Uma referência ao valor |
| Cópia | Copia-se o valor em si | Copia-se a referência |
| Modificação | As alterações na cópia não afetam o original | As alterações através de uma referência são visíveis na outra (se ambas apontarem ao mesmo objeto) |
| Memória | Gerida pela pilha (normalmente) | Gerida pelo heap, libertada pelo coletor de lixo |
| Exemplos | int, float, bool, struct (em algumas linguagens) |
String, Array, Object |
// Exemplo em C#
string s1 = "Hello"; // s1 armazena uma referência à string "Hello"
string s2 = s1; // s2 agora armazena a mesma referência que s1
// Ao modificar, não será visível através da outra referência,
// porque as strings em C# são imutáveis.
// Ao modificar, cria-se uma nova string e a referência é reatribuída.
s1 = "World";
Console.WriteLine(s2); // Mostra "Hello"
int[] arr1 = { 1, 2, 3 }; // arr1 armazena uma referência a um array {1, 2, 3}
int[] arr2 = arr1; // arr2 agora armazena a mesma referência
arr2[0] = 10; // Alteração através de arr2
Console.WriteLine(arr1[0]); // Mostra 10, a alteração é visível através de arr1
// Exemplo em Java
String s1 = "Hello"; // s1 armazena uma referência à string "Hello"
String s2 = s1; // s2 agora armazena a mesma referência que s1
// As strings em Java são imutáveis.
// Ao modificar, uma nova string é criada e a referência é reatribuída.
s1 = "World";
System.out.println(s2); // Mostra "Hello"
int[] arr1 = { 1, 2, 3 }; // arr1 armazena uma referência a um array {1, 2, 3}
int[] arr2 = arr1; // arr2 agora armazena a mesma referência
arr2[0] = 10; // Alteração através de arr2
System.out.println(arr1[0]); // Mostra 10, a alteração é visível através de arr1