Ponteiros ou o que?

19 respostas
Guitar_Men

Galera é seguinte…
Recentemente fiz um programa no qual eu preenchia um arraylist, que vou chamar de array1 e depois copiava esse array pra um outro, array2. Então depois de copiar, ou pelo menos achar que estava copiando, pelo comando array2 = array1 e limpar o array2 atravez do comando clear ele limpava o conteúdo de array1. Sò consegui resolver esse problema usando array1.addFromAll(array2). A minha pergunta é isso seria um ponteiro ??

19 Respostas

fabim

A instrução array2 = array1 não copia. Ela simplesmente diz:

“Faça a variável array2 REFERENCIAR o mesmo objeto que a variavel array1 referencia”.

L

Em Java, o conceito se chama “referência”.

Java costuma complicar as coisas porque existe a separação entre tipos primitivos e objetos. No caso de Array (objeto), você só terá um novo Array quando explicitamente chamar o construtor via new (ou um método, onde dentro dele tenha a chamada a new). Não é o caso de “array2 = array1”, onde está se dizendo que “a referência de array2 será a mesma que a de array1”.

Javabuntu

java e ponteiros não combinam. :lol:

ViniGodoy

Em C++ também existe esse conceito.
Entretanto, o Java permite que se troque valores das referências, o que não é permitido no C++.

Agora, ponteiro é uma variável que representa um endereço de memória, o que não é o caso da referência que nada mais é do que um apelido para um objeto.

Por isso, em java não existe ponteiros ou aritmética de ponteiros.

Além disso, em Java, graças ao garbage collector, você não terá problemas de dangling pointers (ponteiros ou referências para um objeto já deletado) ou de unrecoverable memory leaks (um objeto completamente sem nenhum ponteiro ou referência para ele), que são o que arrepia qualquer um que fala em ponteiros lá no C++.

Guitar_Men

Não existe a nível de programador né ?? Pq na VM com certeza deve ter algum ponteiro para mecher com memória principalmente…

peczenyj

De uma olhada no “The JavaTM Virtual Machine Specification”

http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html

Guitar_Men

Se pegarmos um arraylist, que eh quase uma lista encadeada como tinhamos que implementar em C, não vejo outra possibilidade de implementa-la sem ponteiros…

ViniGodoy

Se for levar em consideração isso, qualquer coisa terá ponteiros.
Até PHP.

No final das contas, tudo cai no baixo nível, onde endereços para cá e para lá são muito comuns.

Guitar_Men

Se for levar em consideração isso, qualquer coisa terá ponteiros.
Até PHP.

No final das contas, tudo cai no baixo nível, onde endereços para cá e para lá são muito comuns.

Por isso eu disse que a nível de PROGRAMADOR não existe. Logo a afirmação do nosso amigo Javabuntu:

Não está totalmente certa.

ViniGodoy

Está, porque ele fala “em java”.

A linguagem java não admite ponteiros.
A VM também não fornece uma interface que te permite, mesmo em bytecode, manipular diretamente endereços de memória, portanto, também não tem ponteiros.

Agora, a implementação da VM não é parte da linguagem Java. Só sua interface externa é. A implementação é algo particular, provavelmente feita em C++ ou C e obviamente poderá usar ponteiros.

Guitar_Men

Ainda defendo minha opinião, a linguagem JAVA sem a VM é o que ??

ViniGodoy

Então é como falei… PHP tem ponteiros…

O fato é que não interessa como o conceito é implementado.
O que interessa é o conceito após implementado.

Você falou em “nível de programador”… que outro nível existiria?

Guitar_Men

nível de implementação da interpretação do código como eh feito em java… Diferente do C/C++ que é compilado.
Mas enfim ficaríamos dias discutindo isso que naum levaria a lugar nenhum… De qualquer forma valew pelos esclarecimentos Vini :wink:

ViniGodoy

É o que eu falei… nesse nível, para todas as linguagens vai existir ponteiros, variáveis não vão existir, nem sequer funções. O que vai existir é jumps para áreas de memória, acesso a registradores e disparo de interrupções. Vale mesmo a pena dizer que java tem ponteiros só pq, no fundo, ele é executado num processador como todas as linguagens no mundo? Não vale.

Até porque, a implementação de uma linguagem, ou da VM, não representa os conceitos da VM em si. São é só o mecanismo que torna esse conceito possível. Assim como C++ não passa a ser assembly só porque no fundo, vira um monte de dado hexadecimal.

O que eu não entendo é pq todo programador de C ou de C++, quando vê referências adora vir aqui no fórum e dizer: “Aha!!! Tá vendo, eu sabia que Java tinha ponteiros.”

Sorry my friend. Não tem. Você não poderá fazer malloc em área de memória e capturar seu endereço. Você não poderá somar endereços de memória para percorrer um vetor. Aliás, as referências também são typesafe. Nada de casts malucos, sem respeito a hierarquia de classes. Nada de pegar um carro de bytes e dizerem que ele representa tal classe. Nada de dangling pointers ou memory leaks.

Na linguagem Java, não existem ponteiros. A VM também não deixa você criar ponteiros. O que ela faz por debaixo dos panos não interessa porque você não vai conseguir usar. A menos que pare de usar Java… mas daí, já não é java mais.

Guitar_Men

Galera meio revoltada com programadores C/C++.

ViniGodoy

Tem razão…
Só um detalhe. Eu sou muito fã de C++. É até a linguagem usada no meu blog. :slight_smile:

Javabuntu

Guitar_Men:

Por isso eu disse que a nível de PROGRAMADOR não existe. Logo a afirmação do nosso amigo Javabuntu:

Não está totalmente certa.

colega eu disse a linguagem JAVA… acho que vc não entendeu o comentário…

Mantu

Bom, não custa dar uma olhadinha:
http://www.javaranch.com/campfire/StoryCups.jsp

leobr84

Aproveitando este topico que estar dentro do contexto que to estudando a dúvida é a seguinte.
Se eu tenho uma lista duplamente encadeada e quero apagar um elemento (vamos supor o 1º elemento desta lista), então basta eu ‘setar’ o elementos e os ponteiros (proximo e anterior) deste No para nulo e settar também o proximo No para que o ponteiro anterior dele seja == null?

Isso apagaria o 1º nó da lista?
falou.

Criado 24 de março de 2008
Ultima resposta 14 de abr. de 2008
Respostas 19
Participantes 8