Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Referencias em metodos

Quando recebo um vetor em um metodo por exemplo:

void setVetor(int[] vetor){
     this.lista = vetor;
}

sendo que lista também é um vetor de int. se eu nao estiver dado new em lista e eu fizer isto eu estarei fazendo realmente uma copia do vetor que foi passado para o metodo ?

7 respostas

Weslen boa noite,

Nesse caso você não terá uma cópia e sim a própria instancia de vetor.

Caso você alterar um dos valores da lista você perceberá que o mesmo valor será alterado no vetor também.

Espero ter ajudado :)

Só para esclarecer um pouco mais, existem duas formas de se passarem parâmetros no Java: por valor e por referencia.

Quando você passa um objeto por parâmetro, não está criando uma copia dele e sim a referência. Então se algum valor for alterado dentro do método essa mudança se refletirá para quem o chamou. No caso do Java, matrizes e vetores são considerados objetos, logo é passado por referencia.

E a passagem de parâmetro por valor ocorre para tipos primitivos como: int, double, char, etc...

Porém, se você desejar passar um objeto por valor, poderá usar o modificador final.

void setVetor(final int[] vetor){ this.lista = vetor; }

Esse conceito é muito importante de se fixar, pois pode acabar gerando bugs muito difíceis de se identificar.

Abraços!

com esse modificador final no caso do vetor eu estaria recebendo uma copia dentro do metodo do objeto que estou passando é isso mesmo ?

Sim. Sem o modificador final, é passado a referencia e com o final é passado uma copia.

aaa entendi só mais uma duvida percebo que geralmente quando o eclipse cria um atributo de classe ele coloca como final, isso quer dizer oque ? é relacionado tambem a copias nos metodos ?

solução!

O modificador finalnos atributos indicam constantes. Então uma vez atribuído uma referência, ou valores para tipos primitivos, ao tentar modifica-los é lançado o erro.

Agora porque o eclipse faz isso, ai eu já não sei. =D

aaaa vlw mesmo me ajudou muito ^^