Oi pessoal… Sou novo em JAVA e pelo que eu li, JAVA não usa ponteiros, más eu gostaria de usar algum recurso tipo ponteiro aonde eu não tenha que limitar o tamanho de um ARRAY… Isso existe em JAVA? Se tiver como fazer, existe algum tutorial, porque como sou iniciante tem que ser detalhado. rsrsrsrs… Obrigado a todos e bons estudos!!!
Para nao limitar o numero de caracteres, existe algumas API que irao te ajudar.
Exemplo:
[code]List lista = new ArrayList();
lista.add(“Item 1”);
lista.add(“Item 2”);
…
lista.add(“Item 500”);
[/code]
Abraços
Os objetos em java são todos passados por referências, exceto os tipos de primitivos que são passados por valor.
bom estudo.
tem variáveis de referência a objetos, esse tipo de variável armazena o endereço de memória
onde foi instanciado um objeto, ou seja, é um ponteiro para um objeto.
A dúvida se a linguagem Java utiliza, ou não, ponteiros vêm do fato da mesma não possuir um recurso conhecido da Linguagem C: A Aritmética de Ponteiros.
[quote=walissongpi]http://www.devmedia.com.br/articles/viewcomp.asp?comp=3162
Os objetos em java são todos passados por referências, exceto os tipos de primitivos que são passados por valor.
bom estudo. [/quote]
Cuidado. No java só existe passagem por valor. O que acontece é que as variáveis de objetos são referências. Mas mesmo elas são passadas por valor. Isso explica pq o código abaixo imprime “Olá”:
[code]public static void inutil(Object x) {
x = new String(“Teste”);
}
public static void main(String args[])
x = “Olá!”;
inutil(x);
System.out.println(x);
}[/code]
A definição de um ponteiro é “Uma variável que representa um endereço de memória”. Portanto, o Java não possui ponteiros. Com ponteiros é possível imprimir o endereço de memória de um objeto. É impossível realizar aritmética e obter um novo endereço. É possível apontar para uma área de memória não reservada (dangling pointer).
O conceito que o Java usa é o de referência, como vc bem citou. A referência representa um apelido para um objeto, portanto, não será possível manipular endereços diretamente. Claro que, internamente, uma referência é implementada através de ponteiros. Mas é tão relevante chamar a referência de ponteiro quanto é chamar um InnetAddress de int, só pq internamente ele é implementado através de um int.
A linguagem C++ implementa os dois conceitos. Você pode tanto ter ponteiros *, quanto referências &. O uso do último é o mais recomendado, justamente por não ser tão inseguro.
[quote=ViniGodoy][quote=walissongpi]http://www.devmedia.com.br/articles/viewcomp.asp?comp=3162
Os objetos em java são todos passados por referências, exceto os tipos de primitivos que são passados por valor.
bom estudo. [/quote]
Cuidado. No java só existe passagem por valor. O que acontece é que as variáveis de objetos são referências. Mas mesmo elas são passadas por valor. Isso explica pq o código abaixo imprime “Olá”:
[code]public static void inutil(Object x) {
x = new String(“Teste”);
}
public static void main(String args[])
x = “Olá!”;
inutil(x);
System.out.println(x);
}[/code]
A definição de um ponteiro é “Uma variável que representa um endereço de memória”. Portanto, o Java não possui ponteiros. Com ponteiros é possível imprimir o endereço de memória de um objeto. É impossível realizar aritmética e obter um novo endereço. É possível apontar para uma área de memória não reservada (dangling pointer).
O conceito que o Java usa é o de referência, como vc bem citou. A referência representa um apelido para um objeto, portanto, não será possível manipular endereços diretamente. Claro que, internamente, uma referência é implementada através de ponteiros. Mas é tão relevante chamar a referência de ponteiro quanto é chamar um InnetAddress de int, só pq internamente ele é implementado através de um int.
A linguagem C++ implementa os dois conceitos. Você pode tanto ter ponteiros *, quanto referências &. O uso do último é o mais recomendado, justamente por não ser tão inseguro.[/quote]
Gostei muito da sua explicação com o exemplo que você passou… É que sou iniciante em JAVA e em orientação a objetos, então quero aprender esses conceitos da OO e o que o Java pode me oferecer
Na verdade existe até aritimética de ponteiros em JAVA.
import sun.misc.GC;
import sun.misc.Unsafe;
Essas classes fazem aritimética de ponteiros.
Para iniciante considere o que o ViniGodoy escreveu.
[quote=r4it0.light]import sun.misc.GC;
import sun.misc.Unsafe;
Essas classes fazem aritimética de ponteiros.[/quote]
Essas classes não fazem parte da distribuição Java oficial. Embora sejam colocadas junto com o SDK, são classes exclusivas da Sun, e nada garante que outro implementador da linguagem Java (como o OpenJDK) vá incluí-las. É como usar uma lib externa, que use JNI.
Anyway, essa operação insegura teve de ser encapsulada numa classe justamente pq a linguagem java não dá suporte a esse recurso. Aí é necessário fazer classes que o façam por JNI.
[quote=ViniGodoy]
A linguagem C++ implementa os dois conceitos. Você pode tanto ter ponteiros *, quanto referências &. O uso do último é o mais recomendado, justamente por não ser tão inseguro.[/quote]
. . O que ao meu ver , torna a linguagem perfeita para o estudo de estrutura de dados .
Eu não concordo. Só o conceito de referências e a alocação dinâmica com new já são suficientes para o estudo de estruturas de dados. É até melhor, pois alguns detalhes de ponteiros mais atormentam o aluno, do que contribuem para o aprendizado dele sobre as estruturas em si.
poxa Vini… concordo com a Nandha, em C++ os ponteiros sao uma mão na roda e na faculdade onde estudo Estrutura de Dados é em C++ e creio que seja mais vantagem essa matéria em C++. Poderia fazer uma enquete hein… rsrsrsrsrs
Bom final de semana a todos e bons estudos