O Java tem referências, o que é muito próximo do modificador & do C++, exceto pelo fato que as referências em java podem ser nulas.
Mas, não é possível descobrir o endereço de memória de uma referência. Por consequência, também não é possivel fazer artiméticas com o endereço apontado pela referência.
Finalmente, com o Garbage Collection, não é possível excluir um objeto referenciado e deixar o estado de outras referências inválido.
Java tem ponteiros? Se você considerar a referência um ponteiro, sim. Java tem as dores de cabeça da programação com ponteiros? Para isso, a resposta é não.
A gente diz que uma linguagem tem ponteiros quando pode usar os ponteiros. E quem já usou ponteiros no C por exemplo, sabe que sem aritmética de ponteiros eles não servem para nada.
Java NÃO permite o uso de ponteiros e consequentemente não tem aritmética de ponteiros.
Apague 3 cruzinhas da cartucheira do tal programador Java seu amigo.
C# tem os ponteiros, mas eles não devem ser usados indiscriminadamente. Na verdade seu uso torna os programas mais lentos (em vez de mais rápidos), por limitar algumas otimizações, e é desaconselhado.
Para lembrar o programador que está usando ponteiros, o C# exige que você use a palavra-chave “unsafe” e passe alguns parâmetros ao compilador para “liberar” o uso de “unsafe”.
[quote=JotaJota]Assunto dificil, complexo, que serve tanto para Java basico, como para Java avançado;
Já me falaram que java não tem ponteiro até eu conhecer um dos melhores programadores java e me falar que Java tem sim ponteiro!
Pois bem, façamos o seguinte…
lanço uma pergunta:
AFINL JAVA TEM OU NÃO TEM PONTEIRO? PORQUE VC AFIRMA QUE SIM OU QUE NÃO???
[/quote]
Java sim tem ponteiro. É incoerente e impossivel pensar numa linguagem por objectos sem ponteiros. Em java , ponteiros são chamados de referência (reference).
O que o java não têm é aritmética de ponteiros. Em C vc pode somar ponteiros com números inteiros e obter outro ponteiro. Em Java isso não é possível.
A prova que Java tem ponteiros (pointer) está na existência da exceção mais chata : NullPointerException. Que significa: “Hei! Este ponteiro não aponta para lado algum!”
[quote=Luiz Aguiar]meu pai teve um passtão pointer gts 1.8, dúvido perder pra qualquer carro atual que custe menos de 40 mil.
aquilo lá sim que era carro viu…[/quote]
Poxa era meu sonho… E quantas cervejas vai tomar no final de semana?
erick nao liga nao… tem louco para tudo… mais respondendo a pergunta… quando li o livro da kathy ela falou “Quando você quiser apontar(isso eh java nao tem ponteiros), opa, referenciar para alguma variavivel vc faz…”
Entao pegando esse trecho da kathy… eu sempre achei que java nao tem ponteiro… e fico puto quando meu professor de java fica falando… “vc tem que apontar para tal coisa” eu fico com raiva…
enfim nao tem ponteiros em java… e sim referencias…
Sim, na especificação da linguagem diz na página 45, 4.3.1 Objects:
“An object is a class instance or an array.
The reference values (often just references) are pointers to these objects, and a special null reference, which refers to no object.”
Na frase pointers significa que apontam para os objetos e não que Java tenha ponteiros.
Quando eu aprendi minha primeira linguagem fiquei sabendo que ela tinha uma tabela de símbolos. Só que eu nunca consegui colocar nenhum símbolo lá e muito menos ler a tal tabela. O fato da linguagem usar internamente ponteiros ou tabela de símbolos não significa que a linguagem os disponibilize.
Eu nunca consegui usar ponteiros com Java mas se você acredita que existam então já deve ter usado. Pode dar um exemplo rápido do uso de ponteiros com Java?
Nem venha com referência na passagem de parâmetros porque isto Fortran já tinha no primeiro programinha que eu escrevi em 1969.
[]s
Luca (que gostou muito da resposta do Thingol)
Sim, na especificação da linguagem diz na página 45, 4.3.1 Objects:
“An object is a class instance or an array.
The reference values (often just references) are pointers to these objects, and a special null reference, which refers to no object.”
Na frase pointers significa que apontam para os objetos e não que Java tenha ponteiros.
[/quote]
Se é isso que vc interpreta daquela frase, seja. Eu interpreto outra coisa.
O conceito de ponteiro é diferente do conceito de aritmética de ponteiros.
Parece que todo o mundo está achando que um implica o outro. Isso não é verdade.
Java tem ponteiros (NullPointerException) mas não permite arimética de ponteiros. Para deixar este fato claro, os ponteiros são chamados de referencia (já que não existe tal coisa como “arimética de referencias” esse nome não é ambíguo)
Mas como vc mesmo citou, na realidade as referencias são ponteiros.
“the reference values (often just references) are pointers” = " os valores de referência (chamados normalmente apenas de referências) são ponteiros"
Não ha forma mais clara de demonstrar que Java tem ponteiros, e que referencias são ponteiros, do que a fase que vc citou. Mas se mesmo assim continuar achando que Java não tem ponteiros …
O que vc nunca consegui usar foi aritmética de ponteiros. Os ponteiros vc usa a todo o momento.
Java não é uma religião e isto não se trata de acreditar. Se trata de entender os conceitos. Se trata de entender que “ponteiro” é diferente de “aritmética de ponteiro”. Entendendo isto, é simples entender que Java tem o primeiro e não o segundo.