Olá !
Estou com uma dúvida sobre passagem de parametros para metodos por referencia ou por valor.
Vi que no Java não podemos indicar se o parametro que queremos passar em um metodo é por valor ou por referência, sendo assim, é o compilador quem decide ? Não entendi direito como. Em outras linguagens podemos indicar (em C# basta colocar a palavra REF por exemplo)
Se passo um valor primitivo (int, double…) o parametro é passado por valor. Se passo um array o mesmo é passado por referencia pois é um objeto. Porém se passo um objeto String porque o mesmo é passado como valor e não como referencia se é um objeto ?
Fiquei nessa dúvida pois no livro do Deitel (que estou lendo) não tem um detalhe maior.
Os argumentos em Java somente são passados por VALOR. Isso mesmo!
Com os primitivos, os valores são copiados. Com objetos, é passada uma CÓPIA da referência para o objeto e não uma cópia do Objeto, pois a variável é apenas uma referência para o objeto.
Na dúvida sobre pq então, quando se passa um objeto, este pode ser modificado pelo método recipiente, é esclarecida quando se entende exatamente o que a variável representa.
Veja: Object ball = new Object();
A leitura correta para a linha acima é: a variável ball armazena uma referência a um objeto Object. Ou seja, a variável não está ARMAZENANDO O OBJETO, mas Somente uma REFERÊNCIA a ele, ou seja, um endereço que identifica a posição do objeto na memória.
Se eu chamar: callPlayer(ball), eu estarei passando, de acordo com a especificação do Java, o Valor da variável ball, que é o que? Uma referência!
1 - passagem de parametros SÓ POR VALOR. Gostei muito dessa explicação - clareou as idéias.
[quote=danieldestro]Nana, nina não.
Os argumentos em Java somente são passados por VALOR. Isso mesmo!
Com os primitivos, os valores são copiados. Com objetos, é passada uma CÓPIA da referência para o objeto e não uma cópia do Objeto, pois a variável é apenas uma referência para o objeto.[/quote]
2 - Também gostei da dica do obj tipo String. Eles são imutáveis !!! Esse link que vc passou foi BEM legal.