Afinal, java tem ponteiro?

Olá

Fortran tem referência logo Fortran tem ponteiros?

[]s
Luca (que ainda espera pelo exemplo de uso de ponteiros em Java)

apenas mais um comentário insano frente aos outros realizados!

[quote=Luca]Olá

Fortran tem referência logo Fortran tem ponteiros?

[]s
Luca (que ainda espera pelo exemplo de uso de ponteiros em Java)[/quote]

Fortran tem arrays ? Se sim , tem ponteiros.
http://pt.wikipedia.org/wiki/Ponteiro_(programa%C3%A7%C3%A3o)#Fortran

Agora vc está confundindo passagem por referência com referência. Isso é conversa para outro tópico.

Olá

Desculpe, agora eu pisei na bola. Esqueci que as novas especificações do Fortran tem ponteiros. Mas arrays sempre existiram em Fortran e a gente sempre fazia sistemas com endereçamento indireto, que na prática é como se usa algo parecido com ponteiro em uma linguagem que não tem ponteiros.

O argumento que estou desenvolvendo é que uma linguagem pode ter internamente no compilador ponteiros, tabelas de símbolos, tabelas hash, etc. mas o que importa para o programador é se a linguagem fornece meios de usar.

Java não fornece nenhum meio de usar ponteiros. Já as linguagens que tem ponteiros fornecem constructs para isto.

Não sei há quanto tempo você usa Java. Eu comecei desde a primeira versão 1.02 que todo mundo baixou na Internet em 96 mas poucos usaram. Eu comprei logo 2 livros. Todos os textos de Java afirmavam que entre as grandes vantagens do Java, uma era não ter ponteiros. A outra grande vantagem era ter exceptions mas isto é papo para outro choppe.

Por isto sempre que alguém diz que Java tem ponteiros peço simplesmente para mostrar como usa. Até hoje ninguém mostrou.

[]s
Luca

  1. A pergunta é : Java tem ponteiros ?
    A isto so se pode responder sim ou não. A pergunta não é “Posso usar/manipular os ponteiros ?”

A resposta à pergunta é : Sim, Java tem ponteiros.

2)Se a pergunta fosse : Java permite manipular ponteiros ?
Ai a resposta seria: Não.
Mas infelizmente essa não foi a pergunta.

  1. Vc parte do principio errado de que “Só tem ponteiros se eu os puder manipular” O que vc está pensando é : “Java tem ponteiros mas não os expôe ao programador”. Ah! bom, mas a pergunta não era: “Java expõe os seus ponteiros?”
    É mais ao mesmo como “Vc só tem alma se eu a puder ver”. Este tipo de argumento é sem sentido. Mas vamos deixar então claro de uma vez por todas:

Q) Java tem ponteiros ?
R) Sim, tem.

Q) Java expõe os ponteiros de forma que o programador os possa manipular ?
R) Não. Java não expoe os seus ponteiros.

Q) Java permite o programador usar aritmética de ponteiros ?
R) Não. Java não permite isso.

C: Função / JAVA: Método.
C: Ponteiro / JAVA: Referência (sem aritmética de referências)

Falow

Olá

[quote=sergiotaborda]
3) Vc parte do principio errado de que “Só tem ponteiros se eu os puder manipular”[/quote]

Errado na sua ótica, porque nenhum dos seus argumentos me convenceram de que há ponteiros na linguagem.

Durante os 39 anos que tenho participado do desenvolvimento de sistemas ou dando aulas, pois já dei muitas aulas de programação, sempre que alguém me perguntou se uma linguagem tem esta ou aquela facilidade, o intuito da pergunta sempre foi saber se era possível usar tal facilidade.

Perguntar se tem ponteiro internamente para uso do compilador nunca vi e acho que a sua interpretação da pergunta só tem o intuito de sofismar.

Mostrei a voce a especificação para que você conferisse a única citação a ponteiro. Uma maneira de se definir uma referência é citar ponteiro porque o termo referência (&) é usualmente ligado ao conceito de ponteiro (*).

Nesta questão prefiro ficar com os teóricos que criaram a linguagem.

[]s
Luca

As respostas foram muito boas, vlw!
ah desculpa pelo caps ligado! =\ eu tenho mania de digitar titulos assim!
e realmente a resposta do catalizadoor lah foi d+++
=D
eu entendi sim o ponteiro e admiro a quantidade de informações que vc tem…
quanto ao comentario de que é ou nao polemico esse assunto … bom eu acho que é sim… pra ter duas paginas de opniões e estudos diversos… Se não fosse polemico, teria apenas uma resposta :wink:
vlw pela dica de entender o ponteiro!!
abração pra todos

[quote=Luca]Olá

Duas palavras que resumem esta citação: ad verecundiam
http://devir.wordpress.com/2006/11/16/mentiras-sinceras-me-interessam-parte-primeira/

O seu argumento é: Só existem ponteiros em Java se o programador os poder manipular.
Este argumento é falacioso. Repare que eu poderia dizer que:
Só existem strings em Java se o programador as poder manipular.
Aqui estaria certo, mas eu disser :
Só existem referencias em Java se o programador as poder manipular.
Isto é obviamente errado.
Conclui-se que a existência de um recurso na linguagem independe da existência de operadores em cima desse recurso. Concluído isto a existência de operadores independe da existência de operadores sobre eles.
A implicação é: "Se existem operadores sobre X =&gt existe X". Mas o inverso não é verdade, proque aquilo ali é uma implicação e não uma equivalência Ou seja: "Se existem operadores sobre X &lt=&gt existe X" É falso.

Se você, mesmo assim, não consegue entender a diferença e ver que a sua posição é equivocada por se basear numa equivalência que não existe, então não sei mais como lhe explicar que está enganado.

Alguém vai dizer que "ponteiro" é uma implementação de referencia e que
a linguagem java não usa ponteiros porque isso é algo que apenas a JVM pode fazer. A linguagem java e a java virtual machine são coisas separadas e ponteiro é apenas uma implementação pela jvm do conceito de referência usado na linguagem. Isto é tudo verdade. O problema é que não existe hoje nenhuma outra tecnologia que permite implementar referencias além dos ponteiros. Então, a bem ou a mal, doa a quem doer, Java é hoje forçado a usar ponteiros, porque não ha hoje como implementar uma JVM sem eles. Java (a palavra sozinha e sem mais qualificativos) diz respeito à tecnologia Java , que incluem ambas a linguagem e a jvm.

Alguém vai dizer que esta separação entre ponteiro e aritmética de ponteiro é fútil. Se isso fosse verdade a separação entre numero e adição também seria fútil, assim como todos os conceitos que derivam dessa separação , como o conceito de grupo.
A separação não é fútil e é ela que nos deixa observar como Java é uma evolução no panorama de TI por ter desafiado o uso da aritmética de ponteiros do C, e se ter dado bem.

sergiotaborda é brasileiro e não desiste nunca.

:stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue:

Boa SErgico!

Uma referência não é um ponteiro para um objeto?

Caramba! Java não tem ponteiro! Que raiva! Que gente teimosa!

Sim, nao deixa de ser um ponteiro. Mas ele eh gerenciado pela JVM e vc nao pode fazer aritmetica com ele (coisa que provavelmente ja foi dita antes nessa thread, mas eu nao tive saco de ler).

Deus do céu!

Companheiro, muito antes do Gosling sonhar com Oak, já haviam linguagens que rodavam em máquinas virtuais com gerenciamento de memória automático, Java não desafiou ninguém não. Acho que você não pegou a idéia, Java não tem os ponteiros de C, as referências ou “ponteiros” (chame do jeito que você achar melhor) em Java são diferentes, simples assim. Ponteiros como em C não existem em Java, então não dá pra comparar os dois como se fossem a mesma coisa só porque alguém teve a idéia de chamar pelo menos nome (esse alguém não sendo a especificação da linguagem, que chama de “reference”).

Pra que complicar tanto uma coisa tão simples?

Eu concordo.

Eu prefiro dizer que java não tem ponteiros, justamente porque quem pergunta isso está se referindo aos ponteiros de C/C++.

Nesse caso, ponteiros são variáveis que contém o valor de endereços de memória e, portanto, podem apontar para algum objeto, tipo primitivo concreto, ou mesmo para uma área proibida da memória.

Ponteiros são inseguros, podem sofrer arimética, e é isso que os torna distintos das referências. Em C++, referências não podem ter valor nulo, o que as diferencia do java.

Em C++, você também pode excluir um objeto apontado por um ponteiro com o operador delete. Com referências, você não pode fazer isso. No java, não há operador delete, pois há garbage collection.

Portanto, java não tem ponteiros. O conceito dele se aproxima muito mais das referências, embora possam ter valor nulo. Estamos falando aqui do conceito de ponteiros e de referências.

Na prática o compilador vai transformar tudo para ponteiros, e então, obviamente a linguagem terá ponteiros. Da mesma forma, o compilador pode transformar certas variáveis concretas em ponteiros também. Mas acoh que quem pergunta não está interessado em saber se o compilador do java gera ponteiros e sim, se o conceito de ponteiros que tanto causou trauma nas aulas de C++ está lá, e se ele terá os bons e velhos problemas de dangling pointers, memory leaks, e operações ilegais sendo executadas.

Portanto, volto a repetir. A linguagem java não tem ponteiros* e sim referências& que podem ser nulas.

Deus do céu!

Companheiro, muito antes do Gosling sonhar com Oak, já haviam linguagens que rodavam em máquinas virtuais com gerenciamento de memória automático, Java não desafiou ninguém não.

[/quote]

As palavras chave da frase eram “e se deu bem”. É verdade que muitas outras linguagens eliminaram a aritmética de ponteiros, mas nenhuma teve o sucesso que Java tem.

Quanto ao resto, já disse o que tinha a dizer, não me vou repetir.

[quote=ViniGodoy]
Portanto, volto a repetir. A linguagem java não tem ponteiros* e sim referências& que podem ser nulas.[/quote]

Então explique porquê existe a classe NullPointerException.
Vc vai dizer que o povo da sun deu o nome errado , deveria ser NullReferenceException. Pois, mas não é. Então, porque não é?
a)Se Java não tem ponteiros porquê criar uma exceção que fala deles ? Afinal o ponteiro só pode ser nulo se ele existir em primeiro lugar. E se ele não existe, pq falar dele ?
b)Se java tem ponteiros, a exceção é complementa normal, pois indica que o ponteiro ainda não aponta para lugar algum.

Se vc responder que o nome é um engano do povo da Sun e deveria ser NullReferenceException, então seremos obrigados a concluir que eles não sabem dar nomes às coisas, e portanto, referencia, pode muito bem ser um nome para pointer, só que eles se enganaram…

Ah essa pergunta só pessoal da Sun poderá em lhe responder …

Olá

Sérgio,

Ainda me deve o exemplo de pointers com Java. Vá lá naquele link que você me passou das linguagens que tem pointers, copie um exemplo qualquer e converta para Java.

[]s
Luca