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!!!
Arrays e Ponteiros
10 Respostas
Para nao limitar o numero de caracteres, existe algumas API que irao te ajudar.
Exemplo:
List<String> lista = new ArrayList();
lista.add("Item 1");
lista.add("Item 2");
...
lista.add("Item 500");
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.
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.
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á":
public static void inutil(Object x) {
x = new String("Teste");
}
public static void main(String args[])
x = "Olá!";
inutil(x);
System.out.println(x);
}
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.
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.
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.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á":
public static void inutil(Object x) { x = new String("Teste"); } public static void main(String args[]) x = "Olá!"; inutil(x); System.out.println(x); }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.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.
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.
<blockquote><div class="quote-author">r4it0.light:</div>import sun.misc.GC;
import sun.misc.Unsafe;
Essas classes fazem aritimética de ponteiros.</blockquote>
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.
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.
. . 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