Como é que as variáveis são passadas para os métodos?
sobes.tech IA
Resposta da IA
Em Java, as variáveis são passadas por valor para os métodos.
Isto significa que, ao chamar um método, é criada uma cópia do valor da variável, e essa cópia é passada ao método. As alterações feitas no parâmetro dentro do método afetam apenas essa cópia e não a variável original.
Para tipos de dados primitivos (int, float, boolean, etc.), o valor direto é passado.
// Tipo de dado primitivo
int a = 10;
void changeValue(int x) {
x = 20; // A cópia é alterada, não a variável original 'a'
}
changeValue(a);
// Após a chamada do método, 'a' ainda é 10
Para tipos de dados referenciados (objetos, arrays), uma cópia da referência ao objeto é passada. A referência em si é copiada, mas ambas as referências apontam para o mesmo objeto na memória. As mudanças no estado do objeto, feitas dentro do método através da referência passada, serão visíveis fora do método. No entanto, reatribuir a referência dentro do método não afetará a referência original.
// Tipo de dado referenciado
class MyObject {
int value;
}
MyObject obj = new MyObject();
obj.value = 10;
void changeObjectValue(MyObject o) {
o.value = 20; // Altera o estado do objeto, visível de fora
}
void reassignObject(MyObject o) {
o = new MyObject(); // Reatribui a referência local, não afeta 'obj'
o.value = 30;
}
changeObjectValue(obj);
// Após a chamada do método, obj.value é 20
reassignObject(obj);
// Após a chamada do método, 'obj' ainda aponta para o mesmo objeto, e obj.value é 20
// O novo MyObject criado dentro de reassignObject não é acessível de fora
Assim, o Java sempre usa passagem por valor, mas para tipos de dados referenciados, uma cópia do valor da referência é feita, não do objeto em si.