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