Dúvida sobre ponteiros

4 respostas
S

Pessoal,

Bom dia,

Estou migrando de C++ para Java e estou com algumas dificuldades conceituais e gostaria de saber se alguem poderia
me ajudar a esclarecer.

Em C++ tinha o costume muito grande de usar variáveis do tipo Ponteiro (nos quais as variáveis são baseados os endereçamento de memoria).
Gostaria de saber se em java isso é possivel ou se existe algum “truque” para conseguir fazer o mesmo.

Muito Obrigado a quem puder me ajudar

Abraços

4 Respostas

Rafael_Nunes

Em Java não há controle explícito de memória.

Ps: Coloque títulos mais descritivos nos posts…

S

isso quer dizer…
Sem chance???

Obrigado …

Lelis_el_Quatilas

Em Java você não pode utilizar ponteiros. Os ponteiros surgiram como uma necessidade para poder gerenciar a memória, alocar e desalocar. E convenhamos, para quem sabe usar, os ponteiros são uma maravilha, mas para quem não sabe pode ser o fim do mundo.

O uso de ponteiros muitas vezes deixa a linguagem pouco confiável, acredito que por isso Java não tenha ponteiros. E para resolver o problema de gerenciamento de memória temos o coletor de lixo que faz todo o serviço “sujo” de desalocação para você. O que mais uma vez deixa a linguagem mais confiável, pois as vezes não é trivial gerenciar a memória, você como um programador experiente de C++ já deve ter quebrado a cabeça com os famosos segmentation fault.

Mas por debaixo dos panos, os ponteiros são usados em Java, mas o programador não vê absolutamente nada - mais um ponto para a confiabilidade. Experimente - em Java - criar um objeto, passar ele como parametro para um método, modificá-lo dentro deste método e depois da execução desse método verificar o que aconteceu com o objeto. Você vai ver o mesmo resultado que veria se usasse ponteiros e referências em C++.

Espero não ter complicado.
Inté,

P

Quando tive minha “primeira vez” com o Java, vinha de muito C/C++, de forma que entendo sua dúvida.

Devo confessar que demorei a me habituar a poder alocar objetos a torto e a direito sem ter que me preocupar com violações de acesso e vazamentos de memória. Acho que parte desta “neura” persiste até hoje, pois meu reflexo
instintivo me leva a tentar evitar o uso do “new” quando possível…

Anyway, como vc. está iniciando no Java com background de C/C++, acho que a melhor forma de entender o que acontece é imaginar que, na verdade, todos as variáveis cujo tipo descende da classe Object são ponteiros. Ou seja, em C/C++ vc. pode ter uma variável automática (aka stack-based) de um tipo complexo, que será desalocada no retorno da função. Em java, isto não existe. Tirando os tipos primitivos (char, int, byte, float, double, boolean - equeci algum ?), todos os outros são alocados no heap.

Isto significa que algumas contruções comuns em C/C++ não
terão o efeito esperado em Java. P.ex., atribuições do tipo a=b, onde “a” e “b” são variáveis não primitivas correspondem à uma cópia de ponteiros, ou seja, “a” aponta para a mesma área do heap apontada por “b”.

Criado 18 de julho de 2005
Ultima resposta 18 de jul. de 2005
Respostas 4
Participantes 4