Cuando se pasa un objeto como parámetro a un método, este método puede cambiar las propiedades del objeto y devolver el resultado cambiado. Entonces, ¿es un pase de valor o un pase de referencia aquí?
Respuesta: es transferencia de valor. El lenguaje de programación Java solo pasa parámetros con valores. Cuando una instancia de objeto se pasa a un método como parámetro, el valor del parámetro es una copia de la referencia del objeto. Señalando el mismo objeto, el contenido del objeto se puede cambiar en el método llamado, pero la referencia del objeto (no una copia de la referencia) nunca cambiará.
Los parámetros de Java, ya sean tipos primitivos o tipos de referencia, pasan todas las copias (hay otro dicho es aprobar valores, pero es mejor comprender que pasar las copias y los valores de aprobación generalmente es relativo a las direcciones de aprobación).
Si el tipo de parámetro es un tipo primitivo, entonces el pasado es una copia de este parámetro, es decir, el valor del parámetro original, que es el mismo que el valor aprobado mencionado anteriormente. Si el valor de la copia se cambia en la función, el valor original no se cambiará.
Si el tipo de parámetro es un tipo de referencia, entonces se pasa la copia de este parámetro de referencia, y esta copia almacena la dirección del parámetro. Si la dirección de esta copia no se cambia en la función, pero el valor en la dirección se cambia, entonces el cambio dentro de la función afectará los parámetros aprobados. Si la dirección de la copia se cambia en la función, como la nueva, entonces la copia apunta a una nueva dirección. En este momento, el parámetro entrante todavía apunta a la dirección original, por lo que no se cambiará el valor del parámetro.
ejemplo:
public class ParamTest {public static void main (string [] args) { / ** * Test 1: los métodos no pueden modificar los parámetros numéricos * / system.out.println ("Prueba triplevalue:"); doble porcentaje = 10; System.out.println ("antes: porcentaje =" + por ciento); triplezeral (porcentaje); System.out.println ("After: por ciento =" + por ciento); /** * Prueba 2: Los métodos pueden cambiar el estado de los parámetros de objeto */system.out.println ("/ntesting triplesalary:"); Empleado Harry = nuevo empleado ("Harry", 50000); System.out.println ("antes: salario =" + harry.getSalary ()); Triplesalario (Harry); System.out.println ("After: salary =" + harry.getSalary ()); /** * Prueba 3: Los métodos no pueden conectar nuevos objetos a los parámetros de objetos */system.out.println ("/ntesting swap:"); Empleado A = nuevo empleado ("Alice", 70000); Empleado B = nuevo empleado ("Bob", 60000); System.out.println ("antes: a =" + a.getName ()); System.out.println ("antes: b =" + B.getName ()); intercambio (a, b); System.out.println ("After: a =" + a.getName ()); System.out.println ("After: b =" + b.getName ()); } swap void static privado (empleado x, empleado y) {empleado temp = x; x = y; y = temp; System.out.println ("End del método: x =" + x.getName ()); System.out.println ("End del método: y =" + y.getName ()); } Void estático privado tripleario (Empleado X) {X.RaiseSalary (200); System.out.println ("End of Method: salary =" + x.getSalary ()); } Void estático privado triplevalue (doble x) {x = 3*x; System.out.println ("End del método x ="+x); }}Mostrar resultados:
Prueba de triple exceso: antes: porcentaje = 10.0end del método x = 30.0after: porcentaje = 10.0Testing tripleSalary: antes: salario = 50000.0end del método: salario = 150000.0after: salario = 150000.0testing swap: antes: a = alicebebebe: b = bobend del método: x = bob // la copia de la referencia visible es el final de la referencia de la referencia de la referencia visible es el método y el método y el método y el método: a = Alice // La referencia en sí no se intercambia después de: B = Bob
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.