Quando um objeto é passado como um parâmetro para um método, esse método pode alterar as propriedades do objeto e retornar o resultado alterado. Então, é um passe de valor ou um passe de referência aqui?
Resposta: É transferência de valor. A linguagem de programação Java passa apenas parâmetros com valores. Quando uma instância de objeto é passada para um método como um parâmetro, o valor do parâmetro é uma cópia da referência do objeto. Apontando para o mesmo objeto, o conteúdo do objeto pode ser alterado no método chamado, mas a referência do objeto (não uma cópia da referência) nunca mudará.
Os parâmetros Java, sejam eles tipos primitivos ou de referência, passam todas as cópias (há outro ditado é aprovar valores, mas é melhor entender que a passagem de cópias e os valores que passam é geralmente relativa aos endereços passantes).
Se o tipo de parâmetro for um tipo primitivo, o passado é uma cópia deste parâmetro, ou seja, o valor do parâmetro original, que é o mesmo que o valor aprovado mencionado anteriormente. Se o valor da cópia for alterado na função, o valor original não será alterado.
Se o tipo de parâmetro for um tipo de referência, a cópia deste parâmetro de referência será passada e esta cópia armazena o endereço do parâmetro. Se o endereço desta cópia não for alterado na função, mas o valor no endereço for alterado, a alteração dentro da função afetará os parâmetros passados. Se o endereço da cópia for alterado na função, como novo, a cópia aponta para um novo endereço. No momento, o parâmetro recebido ainda aponta para o endereço original, portanto o valor do parâmetro não será alterado.
exemplo:
classe pública paramtest {public static void main (string [] args) { / ** * Teste 1: os métodos não podem modificar parâmetros numéricos * / system.out.println ("testando triploValue:"); dupla por cento = 10; System.out.println ("antes: porcent =" + por cento); TripleValue (porcentagem); System.out.println ("depois: percent =" + por cento); /** * Teste 2: Os métodos podem alterar o estado dos parâmetros do objeto */System.out.println ("/NTesting Trilesalary:"); Funcionário harry = novo funcionário ("Harry", 50000); System.out.println ("antes: salary =" + Harry.getSalary ()); Trilesalário (Harry); System.out.println ("After: salary =" + Harry.getSalary ()); /** * Teste 3: Os métodos não podem anexar novos objetos aos parâmetros do objeto */System.out.println ("/NTesting Swap:"); Funcionário a = novo funcionário ("Alice", 70000); Funcionário b = novo funcionário ("bob", 60000); System.out.println ("antes: a =" + a.getName ()); System.out.println ("antes: b =" + b.getName ()); troca (a, b); System.out.println ("depois: a =" + a.getName ()); System.out.println ("depois: b =" + b.getName ()); } troca de vazio estático privado (funcionário x, funcionário y) {funcionário temp = x; x = y; y = temp; System.out.println ("Fim do método: x =" + x.getName ()); System.out.println ("Fim do método: y =" + y.getName ()); } private estático vazio triplico (funcionário x) {x.raisesalary (200); System.out.println ("Fim do Método: Salário =" + X.getSalary ()); } private estático void tripleValue (duplo x) {x = 3*x; System.out.println ("Fim do Método X ="+X); }}Mostrar resultados:
Teste TripleValue: Antes: porcentagem = 10.0End do método x = 30.0AFTER: porcentagem = 10.0 Trilesalário de teste: Antes: Salário = 50000.0 End do método: Salário = 150000.0AFTER: Salário = 150000.0 Swap: Antes: A = ALICEBEFELE: B = BOBOND DE MÉTODO x BOBOME a = Alice // A referência em si não é trocada depois: b = bob
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.