Um programa é um conjunto de instruções escrito em determin...
Há duas maneiras de passar argumentos em chamadas de métodos: por valor (os tipos primitivos); e por referência (os objetos).
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: E - Errado
Para entendermos o gabarito desta questão é importante esclarecer como o Java lida com a passagem de argumentos em chamadas de métodos. Na linguagem Java, há uma compreensão comum de que existam duas formas de passar argumentos: por valor e por referência. Porém, a maneira correta de entender isso no contexto de Java é que todos os argumentos são passados por valor.
Quando passamos um tipo primitivo (como int, double, char, etc.) a um método, fazemos uma cópia do valor, e o método recebe essa cópia. Portanto, qualquer alteração feita no valor dentro do método não afeta a variável original fora dele, demonstrando claramente a passagem por valor.
Por outro lado, quando passamos um objeto, o que estamos passando também é uma cópia, mas dessa vez é uma cópia do valor da referência, e não do próprio objeto. Isso significa que o método recebe uma cópia do endereço de memória onde o objeto está localizado. Qualquer operação que modifique o estado do objeto será refletida no objeto original, porque ambos (a referência original e a cópia) apontam para o mesmo objeto na memória. No entanto, se a referência for alterada para apontar para um novo objeto, a referência original permanecerá inalterada, uma vez que apenas o valor da referência foi copiado, não a referência em si. Este é um ponto sutil, mas importante, para diferenciar a verdadeira passagem por referência de uma passagem de valor da referência.
Portanto, dizer que Java passa objetos por referência não é tecnicamente preciso; Java passa a cópia do valor da referência do objeto. Se Java passasse objetos por referência verdadeira, então seria possível reatribuir o objeto original para um novo objeto dentro do método, o que não é possível em Java. Assim, a afirmação proposta na questão é incorreta, e por isso, a alternativa correta é E - errado.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Errado
Em Java, todos os argumentos de métodos são passados por valor, mas é importante entender como isso funciona para tipos primitivos e objetos.
- Tipos Primitivos (Passagem por valor):
- Quando você passa um tipo primitivo (como int, float, char, etc.) como argumento para um método em Java, você está passando uma cópia do valor da variável. Qualquer alteração feita dentro do método não afetará a variável original fora do método, porque a cópia do valor foi passada.
- Objetos (Passagem por valor da referência):
- Quando você passa um objeto como argumento para um método em Java, você está passando uma cópia da referência ao objeto, não o objeto em si. Isso significa que, mesmo que a passagem seja por valor da referência, as modificações feitas no objeto dentro do método serão refletidas fora do método, pois ambas as referências (a original e a copiada) apontam para o mesmo objeto na memória.
Portanto, em Java, não há passagem de argumentos por referência, como em algumas outras linguagens de programação, como C++. Em vez disso, há passagem de argumentos por valor da referência para objetos, o que pode levar a uma percepção de passagem por referência, mas o valor que está sendo passado é a referência ao objeto. Para tipos primitivos, a passagem é realmente por valor.
Portanto, a afirmação de que em Java há duas maneiras de passar argumentos, por valor (tipos primitivos) e por referência (objetos), precisa ser esclarecida para refletir a natureza real da passagem de argumentos em Java.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo