Junior
Como é que os parâmetros são passados nos métodos em Java?
sobes.tech IA
Resposta da IA
Em Java, os parâmetros nos métodos são passados por valor (pass-by-value).
Tipos primitivos:
- É passada uma cópia do valor primitivo. Alterar o parâmetro dentro do método não afeta a variável original fora dele.
// Exemplo para tipo primitivo
public void changeValue(int x) {
x = x + 10; // A cópia de x dentro do método é alterada
}
// Uso:
int original = 5;
changeValue(original);
// original continuará a ser 5
Objetos (tipos referenciados):
- É passada uma cópia da referência ao objeto. Ambas as referências (a original e a no parâmetro do método) apontam para o mesmo objeto na memória.
- Modificar o estado do objeto (por exemplo, chamar um setter, modificar campos) através da referência passada dentro do método afetará o objeto original.
- Reatribuir o parâmetro a um novo objeto dentro do método não mudará a referência original fora dele.
// Exemplo para tipo referenciado (objeto)
public class MyObject {
private int value;
public MyObject(int value) {
this.value = value;
}
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public void modifyObject(MyObject obj) {
obj.setValue(100); // A alteração afeta o estado do objeto original
}
public void reassignObject(MyObject obj) {
obj = new MyObject(200); // O parâmetro obj agora referencia um novo objeto, a referência original não muda
}
// Uso:
MyObject originalObject = new MyObject(10);
modifyObject(originalObject);
// originalObject agora tem value = 100
MyObject anotherObject = new MyObject(50);
reassignObject(anotherObject);
// anotherObject ainda referencia o objeto original com value = 50
Resumindo: O valor da referência (seu endereço) é passado, não o objeto em si. Isso permite modificar o objeto através dessa referência, mas não alterar a própria referência original para apontar para outro objeto.