top of page
Buscar

Java e as Variáveis por Referência e por Valor

Quando se pensa na dinâmica que o computador faz para armazenar as informações

referente a variáveis e objetos que utilizamos em nosso código, por padrão temos noção de

que essas informações ficam armazenadas na memória do computador enquanto estamos

com nossa variável em uso dentro do nosso código. E ao encerrar o código, tudo se encerra

por ali.


De fato, o conceito está correto. Mas por trás existe um comportamento que é

importante termos cuidado quando estamos desenvolvendo nosso código: a diferença entre variáveis por referência e por valor.


Por padrão, quando definimos uma variável como abaixo:


String a = "Isto é uma String!";

Estamos atribuindo um valor específico a ela, neste caso criamos uma String com o

valor de “Isto é uma String!”. Assim como podemos criar um inteiro, um double, etc. Estes são exemplos de variáveis definidas por valor, o que implica no fato de que na memória do

computador, ao ser definida uma variável deste tipo, é alocado um espaço específico contendo o valor definido.


Se eu criar uma variável A = 10 e uma variável B = A, cada uma delas, dentro da

memória do meu computador, ocupará um espaço diferente.


Esse comportamento é bastante interessante quando precisamos tratar cada variável

como um valor independente de fato. Apesar disso, como você pode imaginar, se eu definir

1000 variáveis diferentes como = A (C = A, D = A, E = A, etc.), cada uma delas estará ocupando um espaço a mais na minha memória, espaços estes que contém o mesmo valor (neste caso 10).


Agora, veja o caso abaixo, temos uma situação um pouco diferente:


public class Teste {

	public static void main(String[] args) {
		
		Sapato a = new Sapato();
		Sapato b = a;
		
	}
}

class Sapato {
	
	String cor = "Branco";
	int tamanho = 38;
	
}

Neste caso, criamos uma classe apenas com o intuito de analisar como se comporta o

armazenamento de um objeto dessa classe dentro da memória. Criamos o objeto A, e

semelhante ao que fizemos anteriormente, criamos um objeto B = A.


Apesar de a operação aqui ser muito parecida, se analisarmos os endereços de

memória de A e B, agora eles apontarão para o mesmo lugar. Isso acontece, pois, apenas um objeto foi criado na memória (A), e quando o objeto B foi criado, o que o Java faz por traz é uma referência ao objeto A.


Ao contrário do que vemos no caso das variáveis por valor, neste caso das variáveis

por referência se criarmos 1000 variáveis definindo que são iguais a A (C = A, D = A, E = A, etc.), neste caso não teremos o problema de estar ocupando uma memória diferente para cada uma delas, pois todas as variáveis, por trás, estão fazendo referência ao endereço de memória de A.


O revés que temos aqui é: caso eu decida que agora A.cor = “Amarelo”, essa mudança

afetará todas as variáveis que definimos, visto que a alteração ocorrerá no endereço de memória que todas elas fazem referência.

Comments


Como está o seu currículo?

Ter um bom currículo é uma fator chave para você ter seu trabalho reconhecido perante o mercado de trabalho.

 

Sabemos que elaborar um bom currículo que descreva bem suas habilidade e suas expectativas pode ser uma tarefa muito complicada.

Clique no botão abaixo para ter todo o suporte necessário na elaboração de um currículo nota 10.

Como está o seu currículo?

Ter um bom currículo é uma fator chave para você ter seu trabalho reconhecido perante o mercado de trabalho.

 

Sabemos que elaborar um bom currículo que descreva bem suas habilidade e suas expectativas pode ser uma tarefa muito complicada.

Clique no botão abaixo para ter todo o suporte necessário na elaboração de um currículo nota 10.

Sobre o Autor

"Olá meu nome é Tiago Stasaitis, sou formado

Técnico em Informática e bacharel em Sistemas de Informação.

   

Fundei o Acadêmico Tech no intuito de compartilhar conteúdo que pode ajudar pessoas a se desenvolverem pessoal e profissionalmente. "

1633903387510.jpg
  • LinkedIn - Black Circle
  • Instagram
bottom of page