1: ¿Qué pasa por valor?
Significa que cuando se llama a un método, los parámetros pasados se pasan por copia del valor. Los ejemplos son los siguientes:
public class Temptest {private void test1 (int a) {// hacer algo} public static void main (string [] args) {Temptest t = new Temptest (); int a = 3; t.test1 (a); // El parámetro A pasado aquí es pasar por valor}}Características importantes de pasar por valor: lo que se pasa es una copia del valor, lo que significa que no está relacionado entre sí después de pasar.
Los ejemplos son los siguientes:
clase pública Temptest {private void test1 (int a) {a = 5; System.out.println ("Método Test1 A ="+A); } public static void main (string [] args) {Temptest t = new Temptest (); int a = 3; t.test1 (a); // Después de pasar, el cambio del valor variable del método test1 no afecta a un sistema.out.println ("método principal a ="+a); }}El resultado de la operación es:
a = 5 en el método test1 a = 3 en el método principal
2: ¿Qué pasa por referencia?
Se refiere a los parámetros aprobados cuando se llama el método, y los parámetros aprobados se pasan por referencia. De hecho, la dirección de referencia aprobada es la dirección del espacio de memoria correspondiente a la variable.
Los ejemplos son los siguientes:
public class Temptest {private void test1 (a a) {} public static void main (string [] args) {temptest t = new Temptest (); A a a = nuevo a (); t.test1 (a); // El parámetro A aprobado aquí es pasar por referencia}} Clase A {public int Age = 0; }3: Características importantes del paso por referencia
Lo que se pasa es una referencia al valor, lo que significa que tanto antes como después de pasar el punto a la misma referencia (es decir, el mismo espacio de memoria).
Los ejemplos son los siguientes:
clase pública Temptest {private void test1 (a a) {a.age = 20; Age = "+A.AGE en System.out.println (" test1 Method = "+A.AGE);} public static void main (string [] args) {Temptest t = new Temptest (); a a = new a (); a.age = 10; t.test1 (a); edad ="+a.age en system.println ("método principal ="+"); }} Clase A {public int Age = 0; }Los resultados de la operación son los siguientes:
edad = 20 en el método test1, edad = 20 en el método principal
4: Comprender el proceso de pasar por referencia - Diagrama de asignación de memoria
Para comprender correctamente el proceso de aprobación por referencia, debe aprender a comprender el proceso de asignación de memoria, y el diagrama de asignación de memoria puede ayudarnos a comprender este proceso.
Use el ejemplo anterior para analizar:
(1): Comience a ejecutar, ejecute la línea 8, cree una instancia de A, y el diagrama de asignación de memoria es el siguiente:
(2): Ejecutar la línea 9, modifique el valor de la edad en el caso A. El diagrama de asignación de memoria después de ejecutar es el siguiente:
(3): Ejecutar la línea 10, que es pasar la dirección del espacio de memoria a la que se hace referencia por la variable A en el método principal al método Variable A en Test1 de acuerdo con la referencia. Tenga en cuenta: estas dos variables A son completamente diferentes, no se deje engañar por el mismo nombre.
La asignación de memoria es la siguiente:
Dado que se pasa por referencia, es decir, se pasa la dirección del espacio de memoria, el nuevo diagrama de memoria formado después de completar la transferencia es la siguiente:
En otras palabras: ambas variables apuntan al mismo espacio.
(4): Ejecute la línea 3 y asigne el valor a la edad de la instancia A señalada por la variable A en el método Test1. El nuevo diagrama de memoria formado después de la finalización es el siguiente:
En este momento, el cambio en el valor de edad de la instancia A es causado por el método test1
(5): Ejecute la línea 4, y de acuerdo con el diagrama de memoria en este momento, la edad de salida = 20 en el método Test1
(6): Ejecute la línea 11, y de acuerdo con el diagrama de memoria en este momento, la edad de salida = 20 en el método principal
5: Cambios a los ejemplos anteriores
Después de comprender el ejemplo anterior, algunas personas pueden preguntar, ¿pueden los valores aprobados por referencia no afectarse entre sí? ¿Cuál es la modificación en el método Test1 que no afecta el método principal?
El método es solo usar una nueva instancia en el método Test1. Cambiar al siguiente ejemplo, donde se agrega el tercer comportamiento:
clase pública Temptest {private void test1 (a a) {a = new a (); // una nueva línea a.age = 20; System.out.println ("Test1 Method Age ="+A.AGE); } public static void main (string [] args) {Temptest t = new Temptest (); A a a = nuevo a (); a.age = 10; t.test1 (a); System.out.println ("Método principal Age ="+A.AGE); }} Clase A {public int Age = 0; }El resultado de la ejecución es:
edad = 20 en el método test1 edad = 10 en el método principal
¿Por qué el resultado de esta ejecución es diferente del ejemplo anterior? Es mejor usar el diagrama de memoria para comprenderlo.
6: Comprender por referencia nuevamente
(1): Comience a ejecutar, ejecute la línea 9, cree una instancia de A, y el diagrama de asignación de memoria es el siguiente:
(2): Ejecutar la línea 10 es modificar el valor de la edad en el caso A. El diagrama de asignación de memoria después de ejecutar es el siguiente:
(3): la línea de ejecución 11 es pasar la dirección de espacio de memoria a la que se hace referencia por la variable A en el método principal al método Variable A en Test1 de acuerdo con la referencia. Tenga en cuenta: estas dos variables A son completamente diferentes, no se deje engañar por el mismo nombre.
La asignación de memoria es la siguiente:
Dado que se pasa por referencia, es decir, se pasa la dirección del espacio de memoria, el nuevo diagrama de memoria formado después de completar la transferencia es la siguiente:
En otras palabras: ambas variables apuntan al mismo espacio.
(4): Ejecute la línea 3 y regenere una nueva instancia de A para la variable A en el método Test1. El nuevo diagrama de memoria formado después de la finalización es el siguiente:
(5): Ejecute la línea 4 para asignar el valor a la edad de la nueva instancia A señalada por la variable A en el método Test1. El nuevo diagrama de memoria formado después de la finalización es el siguiente:
Nota: En este momento, se cambia la edad de la variable A en el método Test1, mientras que el método principal no cambia.
(6): Ejecute la línea 5, y de acuerdo con el diagrama de memoria en este momento, la edad de salida = 20 en el método Test1
(7): Ejecute la línea 12, y de acuerdo con el diagrama de memoria en este momento, la edad de salida = 10 en el método principal de acuerdo con el diagrama de memoria de salida = 10
7: Explicación
(1): "En Java, el paso del parámetro se pasa por valor" significa: pasar por valor es una copia del valor aprobado. Pasar por referencia realmente pasa el valor de la dirección de referencia, por lo que se llama colectivamente pasar por valor.
(2): En Java, solo los tipos y cadenas básicos de acuerdo con el siguiente método de definición se pasan por valor, y los otros se pasan por referencia. Es para definir directamente las cadenas usando citas dobles: String Str = "Java Private School";
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.