Paso de referencia y paso de valor

   transferencia de valor (paso por valor) se refiere a cuando se llama función copia los parámetros reales pasados a una función, por lo que si los parámetros Modificar en funciones no afectarán a los parámetros reales.
   Pasada por referencia (el paso por referencia) significa que cuando se llama a la función aborda directamente los argumentos reales pasados a la función, a continuación, modificar los parámetros llevan a cabo, que afectará a los parámetros reales en funciones.
   Solo se pasa el valor en JAVA, no se pasa ninguna referencia. El valor de la dirección también es un valor, y pasar el valor de la dirección no es necesariamente solo pasar por referencia. La diferencia entre el paso de valor y el paso de referencia no es lo que se pasa. Es si el parámetro real se copia al parámetro formal. En lenguaje C, existe una declaración como transferencia de referencia, pero en JAVA, aunque hay un efecto similar, esencialmente no hay transferencia de referencia. El efecto de transferencia de referencia similar que hemos visto es esencialmente transferencia de valor.
   Las variables de tipo básico como int boolean char float double y otros tipos básicos tienen sus datos almacenados en la pila después de ser definidos. Luego, la variable de tipo básico solo pasa un valor cuando se pasa, y la nueva variable en sí misma no tiene otra relación, excepto que el valor y el prototipo son consistentes. Entonces, la transferencia variable de tipo básico es la transferencia de valor.
  Para estos tipos encapsulados de String Integer, pasar str en el pasado es en realidad equivalente a

String str=“hello”;
String st=str;

El valor de "dirección" se pasa aquí, por lo que st = str solo asigna la dirección apuntada por str a st. Es lógico que dado que st y str comparten la misma dirección, entonces str también debería cambiar cuando st cambia, entonces ¿por qué es la variable original str No hay cambios todavía. Esto implica el código fuente de las clases encapsuladas como String e Integr. Observe la implementación subyacente de Stirng.

private final char value[];  

el valor es una constante final que no se puede cambiar, y no hay un método establecido en el código fuente, lo que significa que una vez que el valor no se puede modificar, significa que generalmente modificamos el valor en realidad es equivalente a un nuevo espacio en el montón , Se crea un nuevo objeto String y luego se modifica el puntero de la variable para que apunte al nuevo objeto, por lo que el valor cambia.
  Sin embargo, cuando se define una clase, las variables miembro rara vez se definen como finales y el método set no se establece, por lo que el puntero del montón se pasa cuando se pasa la clase personalizada y la variable miembro se puede cambiar. Entonces el efecto es referencia. Efecto de transferencia (aunque la esencia es la transferencia de valor).

java只有值传递的。
如果是基本数据类型,传递的就是实际的值。
如果是引用数据类型,传递的就是该引用的地址值。
162 artículos originales publicados · elogiados 58 · 90,000 visitas

Supongo que te gusta

Origin blog.csdn.net/ThreeAspects/article/details/105615118
Recomendado
Clasificación