1: O que está passando por valor
Isso significa que, quando um método é chamado, os parâmetros passados são passados por cópia do valor. Exemplos são os seguintes:
classe pública TentST {Private void test1 (int a) {// faça algo} public static void main (string [] args) {tenttSt t = new TentST (); int a = 3; t.test1 (a); // O parâmetro A passado aqui é passar por valor}}Características importantes de aprovação pelo valor: O que é passado é uma cópia do valor, o que significa que ele não está relacionado um ao outro após a passagem.
Exemplos são os seguintes:
classe pública TentST {private void test1 (int a) {a = 5; System.out.println ("Test1 Método A ="+A); } public static void main (string [] args) {tenttSt t = new TentST (); int a = 3; t.test1 (a); // Após a passagem, a alteração do valor variável do método Test1 não afeta o sistema A.out.println ("Método principal a ="+a); }}O resultado da operação é:
a = 5 no método Test1 A = 3 no método principal
2: O que está passando por referência
Refere -se aos parâmetros passados quando o método é chamado e os parâmetros passados são passados por referência. De fato, o endereço de referência aprovado é o endereço do espaço de memória correspondente à variável.
Exemplos são os seguintes:
classe pública temptest {private void test1 (a a) {} public static void main (string [] args) {tentatst t = new tenttSest (); A a = novo a (); t.test1 (a); // O parâmetro A passado aqui é passar por referência}} classe A {public int Age = 0; }3: características importantes da passagem por referência
O que é passado é uma referência ao valor, o que significa que antes e depois da passagem do ponto para a mesma referência (ou seja, o mesmo espaço de memória).
Exemplos são os seguintes:
classe pública TentST {private void test1 (a a) {A.age = 20; AGE = "+A.Aage em System.out.println (" test1 method = "+A.age);} public static void main (String [] args) {Tentest t = new temptest (); a a = novo a (); A.Aage = 10; T.Test1 (A); Age ="+A.Aage em System.out.Println (KiniMn; }} classe A {public int Age = 0; }Os resultados da operação são os seguintes:
idade = 20 no método Test1, idade = 20 no método principal
4: Entenda o processo de aprovação por referência - diagrama de alocação de memória
Para entender corretamente o processo de aprovação por referência, você deve aprender a entender o processo de alocação de memória e o diagrama de alocação de memória pode nos ajudar a entender esse processo.
Use o exemplo acima para analisar:
(1): Comece a correr, a linha 8, crie uma instância de A e o diagrama de alocação de memória é o seguinte:
(2): Run Line 9, modifique o valor da idade no exemplo A. O diagrama de alocação de memória após a execução é o seguinte:
(3): a linha de execução 10, que deve passar no endereço do espaço de memória referenciado pela variável A no método principal da variável A no método Test1 de acordo com a referência. Observação: essas duas variáveis são completamente diferentes, não se deixe enganar pelo mesmo nome.
A alocação de memória é a seguinte:
Como é aprovada por referência, ou seja, o endereço do espaço de memória é passado, o novo diagrama de memória formado após a transferência ser concluído é o seguinte:
Em outras palavras: ambas as variáveis apontam para o mesmo espaço.
(4): Run Linha 3 e atribua o valor à idade da instância A apontado pela variável A no método Test1. O novo diagrama de memória formado após a conclusão é o seguinte:
Neste momento, a mudança no valor da idade da instância A é causada pelo método Test1
(5): Run Line 4, e de acordo com o diagrama de memória neste momento, a idade da saída = 20 no método Test1
(6): Run Line 11, e de acordo com o diagrama de memória neste momento, a idade da saída = 20 no método principal
5: Alterações nos exemplos acima
Depois de entender o exemplo acima, algumas pessoas podem perguntar: os valores passados por referência não se afetam? Qual é a modificação no método Test1 que não afeta o método principal?
O método é apenas usar uma nova instância no método Test1. Mude no exemplo a seguir, onde o terceiro comportamento é adicionado recentemente:
classe pública TentST {private void test1 (a a) {a = new a (); // uma nova linha A.age = 20; System.out.println ("Test1 Método Age ="+A.Aage); } public static void main (string [] args) {tenttSt t = new TentST (); A a = novo a (); a.age = 10; t.test1 (a); System.out.println ("Método principal Age ="+A.Aage); }} classe A {public int Age = 0; }O resultado em execução é:
idade = 20 no método de teste1 idade = 10 no método principal
Por que o resultado dessa corrida é diferente do exemplo anterior? É melhor usar o diagrama de memória para entendê -lo.
6: Entenda por referência novamente
(1): Comece a executar, a linha 9, crie uma instância de A e o diagrama de alocação de memória é o seguinte:
(2): A linha 10 de corrida é modificar o valor da idade no exemplo A. O diagrama de alocação de memória após a execução é o seguinte:
(3): a linha de corrida 11 é passar no endereço do espaço de memória referenciado pela variável A no método principal da variável A no método Test1 de acordo com a referência. Observação: essas duas variáveis são completamente diferentes, não se deixe enganar pelo mesmo nome.
A alocação de memória é a seguinte:
Como é aprovada por referência, ou seja, o endereço do espaço de memória é passado, o novo diagrama de memória formado após a transferência ser concluído é o seguinte:
Em outras palavras: ambas as variáveis apontam para o mesmo espaço.
(4): Run Line 3 e regenera uma nova instância de A para a variável A no método Test1. O novo diagrama de memória formado após a conclusão é o seguinte:
(5): Run Linha 4 para atribuir o valor à idade da nova instância A apontado pela variável A no método Test1. O novo diagrama de memória formado após a conclusão é o seguinte:
NOTA: Neste momento, a idade da variável A no método Test1 é alterada, enquanto o método principal não muda.
(6): Run Line 5, e de acordo com o diagrama de memória neste momento, idade de saída = 20 no método Test1
(7): Run Line 12, e de acordo com o diagrama de memória neste momento, a idade de saída = 10 no método principal de acordo com o diagrama de memória de saída = 10
7: Explicação
(1): "Em Java, a passagem de parâmetros é passada pelo valor" Means: Passagem por valor é uma cópia do valor aprovado. A passagem por referência realmente passa o valor do endereço de referência, por isso é chamado coletivamente de passagem pelo valor.
(2): Em Java, apenas os tipos e seqüências básicas de acordo com o seguinte método de definição são passadas por valor e os outros são passados por referência. É definir diretamente strings usando citações duplas: string str = "Java Private School";
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.