Intern
Qual é a diferença entre tipos de dados primitivos e de referência?
sobes.tech IA
Resposta da IA
Os tipos primitivos armazenam diretamente o valor, enquanto os tipos de referência armazenam uma referência (endereço na memória) ao objeto que contém o valor.
Tipos primitivos:
- Ocupam um tamanho fixo e pequeno na memória.
- São transmitidos por valor (o próprio valor é copiado).
- Começam com letra minúscula.
- Incluem:
byte,short,int,long,float,double,boolean,char.
// Exemplo de tipo primitivo
int a = 10;
int b = a; // Copia o valor 10
b = 20; // Apenas b muda, a permanece 10
Tipos de referência:
- Ocupam diferentes quantidades de memória, dependendo do conteúdo do objeto.
- São transmitidos por referência (o endereço do objeto é copiado). Alterar o objeto através da referência afeta todas as variáveis que o referenciam.
- Geralmente começam com letra maiúscula (classes).
- Incluem: classes (
String,Object, classes personalizadas), interfaces, arrays.
// Exemplo de tipo de referência
String str1 = new String("Hello");
String str2 = str1; // Copia a referência ao objeto "Hello"
str2 = "World"; // str2 agora aponta para um novo objeto "World". str1 ainda aponta para "Hello".
// Outro exemplo com um objeto mutável
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Copia a referência ao mesmo objeto ArrayList
list2.add(2); // Adiciona um elemento ao objeto acessível por ambas as referências
// Agora, list1 contém [1, 2] e list2 também contém [1, 2]
Tabela comparativa rápida:
| Propriedade | Tipos primitivos | Tipos de referência |
|---|---|---|
| Armazenamento | Valor | Referência ao objeto |
| Transmissão | Por valor | Por referência |
| Tamanho de memória | Fixo e pequeno | Variável |
| Começa com | Minúscula | Geralmente com maiúscula |
| Nullabilidade | Não podem ser null |
Podem ser null |
Os tipos primitivos são envoltos em classes wrapper para trabalhar com eles como objetos (por exemplo, int em Integer).