Estrutura de dados em Java - Ponteiros e Alocação de Memória
Click here to load reader
-
Upload
adriano-teixeira-de-souza -
Category
Technology
-
view
4.946 -
download
0
Transcript of Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de DadosPonteiros e Alocação Dinâmica de
MemóriaProf. Adriano Teixeira de Souza
Tipos de VariáveisAs variáveis de um programa, em geral, podem ter dois tipos de conteúdo:
• Valor: instâncias de um determinando tipo
• Referência: indica outra variável na memória
tipo: intvalor: 5
int contador = 5;
tipo: charvalor: ‘b’
char letra = ‘b’;tipo: doublevalor: 8.53
double nota = 8.53;
tipo: ref. p/ string
tipo: ref. p/ int[]texto
int notas[2]
valor: {8, 10}
valor: “abc”
Prof. Adriano Teixeira de Souza
Variáveis: ValoresAtribuir 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.x = 3;p1.y = 1;...p2.x = p1.x;
p2.y = p1.y;...p1.x = 5;
p1 3 1x y
p2x y
p1 5 1x y
p23 1x y
p1 3 1x y
p23 1x y
Prof. Adriano Teixeira de Souza
Variáveis: ReferênciasAtribuir uma referência faz com que ambas apontem para o mesmo objeto. Qualquer alteração afeta as duas variáveis.
Java:
Ponto p1, p2;...p1.x = 3;p1.y = 1;...p2 = p1;...p1.x = 5;
p1 3 1x y
p2 ...
x y
p1 3 1 p2
p1 5 1x y
p2
Prof. Adriano Teixeira de Souza
Referências em Java
Em Java, todos os tipos primitivos são representados por valores:
char c;int x, y;
c = ‘a’;x = y = 3;
s = “if672”;p = new Ponto(3,1);p.x = x;n = new Integer(3);v = null;
String s;Ponto p;Integer n;Vector v;
Os tipos compostos (classes), por outro lado, utilizam referências:
Prof. Adriano Teixeira de Souza
Alocação Dinâmica de Memória
A memória só é requisitada no momento em que o objeto é necessário, evitando o desperdício.
Em Java/C++: através do operador new
Java: Ponto p = new Ponto(800,600);
C++: Ponto *p = new Ponto(800,600);
Parâmetros do construtor
Prof. Adriano Teixeira de Souza
Alocação Dinâmica de Memória
a
int[5]
A memória é alocada para o novo objeto, e sua posição armazenada em uma referência (ponteiro):
Mem
ória
bint[] a;
int[] b;
...
a = new int[5];
b = new int[4];
...
a = b;
int[4]
Não há mais nenhum ponteiro para esta região. O que acontece com ela?
Prof. Adriano Teixeira de Souza
Liberando Memória AlocadaEm 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