Arrays e Ponteiros

10 respostas
adriano_kahn

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!!!

10 Respostas

blackfalcon

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

walissongpi


Os objetos em java são todos passados por referências, exceto os tipos de primitivos que são passados por valor.
bom estudo.

N

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.

ViniGodoy
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.

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.

adriano_kahn
ViniGodoy:
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.

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

R

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.

ViniGodoy
<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.

N

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.

. . O que ao meu ver , torna a linguagem perfeita para o estudo de estrutura de dados .

ViniGodoy

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.

adriano_kahn

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

Criado 20 de maio de 2010
Ultima resposta 21 de mai. de 2010
Respostas 10
Participantes 6