Metodos: Passar argumento por Referencia ou Valor

Olá !
Estou com uma dúvida sobre passagem de parametros para metodos por referencia ou por valor.

  1. 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)
  2. 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.

Agradeço a ajuda de todos

É isso mesmo, valores primitivos são passados por valor, e objetos são passados por referência.

Os objetos String são um caso a parte, pois eles são IMUTÁVEIS.

Da uma lida nesse artigo e vê se ajuda a entender melhor as Strings:

http://www.guj.com.br/java.tutorial.artigo.103.1.guj

T+

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.

Eu tb confirmo, somente passagem por valor.

É isso mesmo, eu que confundi as bolas aqui, desculpe.

Mas em todo caso, você continua tendo uma referência para o objeto.

Reitero: passagem por valor no Java.

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!

Eu postei alguns comentarios sobre este tema… talvez te ajude:

  1. http://www.guj.com.br/posts/list/46065.java#241584

  2. http://www.guj.com.br/posts/list/48112.java#251666

boa sorte

fw

Obrigado a todos !
Resumindo o meu entendimento:

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.

Mais uma vez valeu pessoal…

1 curtida