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 ??
Ponteiros ou o que?
19 Respostas
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”.
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”.
java e ponteiros não combinam. :lol:
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++.
Não existe a nível de programador né ?? Pq na VM com certeza deve ter algum ponteiro para mecher com memória principalmente…
De uma olhada no “The JavaTM Virtual Machine Specification”
http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html
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…
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.
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.
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.
Ainda defendo minha opinião, a linguagem JAVA sem a VM é o que ??
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?
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 
É 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.
Galera meio revoltada com programadores C/C++.
Tem razão…
Só um detalhe. Eu sou muito fã de C++. É até a linguagem usada no meu blog. 
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…
Bom, não custa dar uma olhadinha:
http://www.javaranch.com/campfire/StoryCups.jsp
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.