Em Java, os efeitos sobre referências de objetos e valores primitivos ao serem passados para métodos dependem da natureza dos objetos e valores primitivos e se as mudanças ocorridas dentro do método são refletidas fora dele. Vamos discutir isso para ambos os casos:
Objetos (Referências):
Quando você passa uma referência de objeto para um método, você está passando uma cópia da referência, não do objeto em si. Isso significa que qualquer alteração feita nos conteúdos do objeto através da referência dentro do método será refletida fora do método, já que ambas referências apontam para o mesmo objeto na memória.
Exemplo:
class Pessoa {
String nome;
Pessoa(String nome) {
this.nome = nome;
}
}
public class ExemploReferenciaObjeto {
public static void main(String[] args) {
Pessoa pessoa = new Pessoa("Alice");
System.out.println("Antes do método: " + pessoa.nome);
modificarNome(pessoa);
System.out.println("Depois do método: " + pessoa.nome);
}
static void modificarNome(Pessoa p) {
p.nome = "Bob";
}
}
Neste exemplo, o método modificarNome recebe uma referência para um objeto Pessoa e altera o valor do atributo nome. Essa alteração é refletida fora do método, e o nome da pessoa é impresso como “Bob” no método principal.
Valores Primitivos:
Quando você passa valores primitivos para um método, está passando uma cópia do próprio valor, não uma referência ao valor. Portanto, qualquer alteração feita dentro do método não afetará o valor original fora do método.
Exemplo:
public class ExemploValoresPrimitivos {
public static void main(String[] args) {
int numero = 10;
System.out.println("Antes do método: " + numero);
modificarNumero(numero);
System.out.println("Depois do método: " + numero);
}
static void modificarNumero(int n) {
n = 20;
}
}
Neste exemplo, o método modificarNumero recebe uma cópia do valor inteiro numero e tenta modificá-lo. No entanto, essa modificação não afeta o valor original fora do método, e o número impresso no método principal permanece como 10.
Em resumo, para objetos (referências), as alterações feitas nos conteúdos do objeto dentro do método são refletidas fora do método, enquanto para valores primitivos, as alterações feitas dentro do método não afetam o valor original fora do método.