2. As variáveis de um programa, em geral, podem ter dois
tipos de conteúdo:
• Valor: instâncias de um determinando tipo
int contador = 5; char letra = „b‟; double nota = 8.53;
tipo: int tipo: char tipo: double
valor: 5 valor: „b‟ valor: 8.53
• Referência: indica outra variável na memória
int notas[2]
tipo: ref. p/ int[] valor: {8, 10}
texto
valor: “abc” tipo: ref. p/ string
Prof. Adriano Teixeira de Souza
3. Atribuir uma variável de valor a outra apenas copia
seu conteúdo atual. Uma modificação em uma delas
não afeta a outra variável.
Ponto p1, p2; p1 3 1 p2
x y x y
...
p1.x = 3;
p1.y = 1; p1 3 1 3 1 p2
... x y x y
p2.x = p1.x;
p1 5 1 3 1 p2
p2.y = p1.y;
x y x y
...
p1.x = 5;
Prof. Adriano Teixeira de Souza
4. Atribuir uma referência faz com que ambas apontem
para o mesmo objeto. Qualquer alteração afeta as duas
variáveis.
Java: p1 3 1 p2 ...
x y
Ponto p1, p2;
... 3 1
p1 p2
p1.x = 3; x y
p1.y = 1;
...
p1 5 1 p2
p2 = p1;
x y
...
p1.x = 5;
Prof. Adriano Teixeira de Souza
5. Em Java, todos os tipos primitivos são representados
por valores:
char c; c = „a‟;
int x, y; x = y = 3;
Os tipos compostos (classes), por outro lado, utilizam
referências: s = “if672”;
String s; p = new Ponto(3,1);
Ponto p; p.x = x;
Integer n; n = new Integer(3);
Vector v; v = null;
Prof. Adriano Teixeira de Souza
6. A memória só é requisitada no momento em que o objeto é
necessário, evitando o desperdício. Parâmetros do construtor
Em Java/C++: através do operador new
Java: Ponto p = new Ponto(800,600);
C++: Ponto *p = new Ponto(800,600);
Prof. Adriano Teixeira de Souza
7. A memória é alocada para o novo objeto, e sua posição
armazenada em uma referência (ponteiro):
Memória
int[] a; a b
int[] b;
...
int[5]
a = new int[5];
b = new int[4];
... int[4]
a = b;
Não há mais nenhum ponteiro para esta região. O que acontece com ela?
Prof. Adriano Teixeira de Souza
8. Em C/C++, é preciso desalocar as variáveis antes de
eliminar a última referência para ela.
Em Java, isso não é necessário, pois o garbage
collector libera a memória automaticamente.
Prof. Adriano Teixeira de Souza