1: Ce qui passe par valeur
Cela signifie que lorsqu'une méthode est appelée, les paramètres passés sont passés par la copie de la valeur. Les exemples sont les suivants:
classe publique tenttest {private void test1 (int a) {// faire quelque chose} public static void main (String [] args) {tentTest t = new TempTtest (); int a = 3; t.test1 (a); // Le paramètre a réussi ici est de passer par valeur}}Caractéristiques importantes du passage par valeur: ce qui est passé est une copie de la valeur, ce qui signifie qu'elle n'est pas liée les unes aux autres après avoir réussi.
Les exemples sont les suivants:
classe publique Tempttest {private void test1 (int a) {a = 5; System.out.println ("Méthode Test1 A =" + A); } public static void main (String [] args) {tentTest t = new TempTest (); int a = 3; T.Test1 (a); // Après avoir réussi, le changement de la valeur variable de la méthode Test1 n'affecte pas le System.out.out.println ("la méthode principale a =" + a); }}Le résultat de l'opération est:
a = 5 dans la méthode Test1 a = 3 dans la méthode principale
2: Ce qui passe par référence
Il fait référence aux paramètres passés lorsque la méthode est appelée, et les paramètres passés sont passés par référence. En fait, l'adresse de référence passée est l'adresse de l'espace mémoire correspondant à la variable.
Les exemples sont les suivants:
classe publique tenttest {private void test1 (a a) {} public static void main (String [] args) {tentTest t = new TempTest (); A a = nouveau a (); t.test1 (a); // Le paramètre a réussi ici doit passer par référence}} classe A {public int Age = 0; }3: Caractéristiques importantes du passage par référence
Ce qui est passé est une référence à la valeur, ce qui signifie que avant et après le passage à la même référence (c'est-à-dire le même espace mémoire).
Les exemples sont les suivants:
classe publique Tempttest {private void test1 (a a) {a.age = 20; Âge = "+ a.age dans System.out.println (" test1 méthode = "+ a.age);} public static void main (String [] args) {tentTest t = new Temptest (); a a = new a (); a.age = 10; t.test1 (a); Âge =" + a.age dans System.out.println ("Main Method =" + a.age); }} classe A {public int age = 0; }Les résultats de l'opération sont les suivants:
âge = 20 dans la méthode Test1, âge = 20 dans la méthode principale
4: Comprendre le processus de passage par référence - Diagramme d'allocation de mémoire
Pour comprendre correctement le processus de passage par référence, vous devez apprendre à comprendre le processus d'allocation de mémoire, et le diagramme d'allocation de mémoire peut nous aider à comprendre ce processus.
Utilisez l'exemple ci-dessus pour analyser:
(1): Commencez l'exécution, exécutez la ligne 8, créez une instance de A, et le diagramme d'allocation de mémoire est le suivant:
(2): Exécutez la ligne 9, modifiez la valeur de l'âge dans l'instance A. Le diagramme d'allocation de mémoire après l'exécution est le suivant:
(3): Exécutez la ligne 10, qui doit passer l'adresse d'espace mémoire référencé par la variable A dans la méthode principale à la variable A dans la méthode Test1 en fonction de la référence. Veuillez noter: ces deux variables A sont complètement différentes, ne vous laissez pas berner par le même nom.
L'allocation de la mémoire est la suivante:
Puisqu'il est passé par référence, c'est-à-dire que l'adresse de l'espace mémoire est passé, le nouveau diagramme de mémoire formé une fois le transfert terminé est le suivant:
En d'autres termes: les deux variables indiquent le même espace.
(4): Exécutez la ligne 3 et attribuez la valeur à l'âge de l'instance A indiqué par la variable A dans la méthode Test1. Le nouveau diagramme de mémoire formé après l'achèvement est le suivant:
Pour le moment, le changement de la valeur d'âge de l'instance A est causé par la méthode Test1
(5): Exécutez la ligne 4, et selon le diagramme de mémoire pour le moment, l'âge de sortie = 20 dans la méthode Test1
(6): Exécutez la ligne 11, et selon le diagramme de mémoire pour le moment, l'âge de sortie = 20 dans la méthode principale
5: modifie les exemples ci-dessus
Après avoir compris l'exemple ci-dessus, certaines personnes peuvent demander, les valeurs transmises par référence ne se affectent-elles pas mutuellement? Quelle est la modification de la méthode Test1 qui n'affecte pas la méthode principale?
La méthode consiste à utiliser simplement une nouvelle instance dans la méthode Test1. Passez à l'exemple suivant, où le troisième comportement est nouvellement ajouté:
classe publique Tempttest {private void test1 (a a) {a = new a (); // une nouvelle ligne a.age = 20; System.out.println ("Test1 Method Age =" + a.age); } public static void main (String [] args) {tentTest t = new TempTest (); A a = nouveau a (); a.age = 10; t.test1 (a); System.out.println ("Method Method Age =" + A.Age); }} classe A {public int age = 0; }Le résultat en cours est:
Âge = 20 dans la méthode Test1 Age = 10 dans la méthode principale
Pourquoi le résultat de cette course est-il différent de l'exemple précédent? Il est préférable d'utiliser un diagramme de mémoire pour le comprendre.
6: Comprendre à nouveau par référence
(1): Commencez l'exécution, exécutez la ligne 9, créez une instance de A, et le diagramme d'allocation de mémoire est le suivant:
(2): L'exécution de la ligne 10 est de modifier la valeur de l'âge dans l'instance A. Le diagramme d'allocation de mémoire après l'exécution est le suivant:
(3): La ligne d'exécution 11 est de passer l'adresse d'espace mémoire référencé par la variable A dans la méthode principale à la variable A dans la méthode Test1 en fonction de la référence. Veuillez noter: ces deux variables A sont complètement différentes, ne vous laissez pas berner par le même nom.
L'allocation de la mémoire est la suivante:
Puisqu'il est passé par référence, c'est-à-dire que l'adresse de l'espace mémoire est passé, le nouveau diagramme de mémoire formé une fois le transfert terminé est le suivant:
En d'autres termes: les deux variables indiquent le même espace.
(4): Exécutez la ligne 3 et régénérez une nouvelle instance de A pour la variable A dans la méthode Test1. Le nouveau diagramme de mémoire formé après l'achèvement est le suivant:
(5): Exécutez la ligne 4 pour attribuer la valeur à l'âge de la nouvelle instance A pointé par la variable A dans la méthode Test1. Le nouveau diagramme de mémoire formé après l'achèvement est le suivant:
Remarque: Pour le moment, l'âge de la variable A dans la méthode Test1 est modifié, tandis que la méthode principale ne change pas.
(6): Exécutez la ligne 5, et selon le diagramme de mémoire pour le moment, l'âge de sortie = 20 dans la méthode Test1
(7): Exécutez la ligne 12, et selon le diagramme de mémoire à ce moment, l'âge de sortie = 10 dans la méthode principale en fonction du diagramme de mémoire de sortie = 10
7: Explication
(1): "En Java, le passage des paramètres est passé par valeur" signifie: le passage par valeur est une copie de la valeur passée. Le passage par référence transmet en fait la valeur d'adresse de référence, il est donc collectivement appelé passer par valeur.
(2): Dans Java, seuls les types et chaînes de base selon la méthode de définition suivante sont passés par valeur, et les autres sont passés par référence. Il s'agit de définir directement les chaînes en utilisant des citations doubles: String str = "Java Private School";
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.