Ponteiros em Java
Afluentes: Estrutura de Dados
Ponteiros
Os ponteiros são variáveis especiais que apontam para uma área de memória. Os ponteiros não possuem a informações em si, mas dizem onde a informação está.
Podemos, em um nível mais alto, fazer um comparativo com páginas web. Quando criamos uma página, adicionamos um conteúdo nela, informações, imagens, etc. Contudo, não podemos colocar tudo numa página só e nem fica bom para se ler, então podemos separar nosso conteúdo por tópicos e para cada um fazemos uma página diferente. Para navegar de uma página a outra, criamos os links. Esses links possuem o endereço web da outra página que queremos acessar e naquela outra página é que está o conteúdo.
Podemos ver os ponteiros, mais ou menos como esses links, ou seja, os ponteiros não possuem a informação, mas o endereço de onde está a informação.
Se você clicar em um link e a página do endereço do link não existir, teremos como resultado um erro 404. Da mesma forma, teremos um erro se tentarmos acessar o conteúdo de um ponteiro que não foi alocado (nulo) ou, no caso do C, um ponteiro selvagem (que aponta para um local qualquer).
Para podermos acessar o conteúdo do ponteiro, precisamos apontar ele para uma área da memória que já existe ou alocar espaço usando new e apontar para essa área recêm criada.
Variáveis versus Ponteiros
As variáveis de um programa, em geral, podem ter dois tipos de conteúdo:
Valor: instâncias de um determinado tipo.
tipo : int tipo : char tipo : double valor: 2 valor: 'z' valor: 34.12
Referência: indica outra variável na memória. tipo : ref. p/ int[] tipo : ref. p/ string valor: {8, 10} valor: "abcdef"
Variáveis: Valores
Considere a classe Ponto:
public class Ponto {
double x;
double y;
}
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.x = 3;
p1.y = 1;
...
p2.x = p1.x;
p2.y = p1.y;
...
p1.x = 5;
Variáveis: Referência
Atribuir uma referência faz com que ambas apontem para o mesmo objeto. Qualquer alteração afeta as duas variáveis.
Ponto p1, p2;
...
p1.x = 3;
p1.y = 1;
...
p2 = p1;
...
p1.x = 5;
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;
Os tipos compostos (classes), por outro lado, utilizam referências.
String s;
Ponto p;
Integer n;
Vector v;
s = "Unisul";
p = new Ponto(3, 1);
p.x = x;
n = new Integer(3);
v = null;
A memória só é requisitada no momento em que o objeto é necessário, evitando o desperdício.
Ponto p = new Ponto(20, 34);
A memória é alocada para o novo objeto e sua posição armazenada em uma referência (ponteiro):
|