Pasar por valor y pasar por referencia en Java, incluidas las preguntas de la entrevista

Compartir preguntas de la entrevista

Haz clic en mí para ir directamente

Enlace de la última colección de entrevistas de 2023

2023 preguntas importantes de la entrevista de fábrica PDF

Preguntas de la entrevista versión PDF

preguntas de la entrevista sobre java y python

Project Combat: mejores prácticas para el reconocimiento OCR de texto con IA

AI Gamma genera un enlace directo a la herramienta PPT con un clic

Reproduzca el artefacto de codificación en línea de Cloud Studio

Juegue con pintura, voz y traducción de IA de GPU, la GPU ilumina el espacio de imaginación de IA

Compartir la documentación más completa sobre la difusión estable de pintura con IA de la historia

Pintura AI sobre enciclopedia SD, MJ, GPT, SDXL

Pintura de IA difusión estable Documento GPT oficial de mitad de viaje Recopilación de datos de la enciclopedia AIGC

Paquete de información AIGC

introducción

En la programación Java, a menudo escuchamos discusiones sobre pasar por valor y pasar por referencia. Estos dos conceptos implican cómo se pasan los datos entre métodos. Comprender estos conceptos es crucial para escribir programas Java correctamente. En este artículo profundizaremos en qué son el paso por valor y el paso por referencia y por qué solo existe el paso por valor en Java.

¿Qué es pasar por valor?

Pasar por valor es un método de pasar datos en el que se pasa una copia de los datos a un método o función. Cuando pasamos una variable a un método, el método recibe una copia de los datos originales, no los datos originales en sí. Esto significa que las modificaciones a los parámetros dentro del método no afectarán los datos originales.

Aquí hay un ejemplo de código Java simple para ilustrar el paso de valores:

public class ValuePassingDemo {
    
    
    public static void main(String[] args) {
    
    
        int x = 10;
        modifyValue(x);
        System.out.println("x = " + x);
    }

    public static void modifyValue(int value) {
    
    
        value = 20;
    }
}

En este ejemplo, definimos un modifyValuemétodo llamado que acepta un parámetro entero valuey luego valuemodifica el valor de a 20. Sin embargo, en mainel método podemos ver que xel valor de sigue siendo 10. Esto se debe a que modifyValuedentro del método, valuelas modificaciones del xvalor no se verán afectadas. Ésta es la característica de la transmisión de valores.

¿Qué es pasar por referencia?

El paso por referencia es un método de transferencia de datos que pasa la referencia o dirección de datos a un método o función. Esto significa que las modificaciones a los parámetros dentro del método afectarán los datos originales. En algunos lenguajes de programación, como C++, se puede lograr el paso por referencia, pero en Java no existe un paso por referencia real.

¿Por qué el valor sólo se pasa en Java?

En Java, aunque a menudo oímos hablar de pasar por referencia, de hecho, Java solo admite el paso por valor. Esto se debe a que todos los tipos de datos en Java son objetos, incluidos los tipos de datos básicos (como int, double, etc.). En Java, una referencia a un objeto se pasa a un método, no al objeto en sí.

Ilustremos esto con un ejemplo:

public class ReferencePassingDemo {
    
    
    public static void main(String[] args) {
    
    
        int[] arr = {
    
    1, 2, 3};
        modifyArray(arr);
        System.out.println("arr[0] = " + arr[0]);
    }

    public static void modifyArray(int[] array) {
    
    
        array[0] = 100;
    }
}

En este ejemplo, definimos una matriz de números enteros arry luego la pasamos al modifyArraymétodo. Dentro del método, modificamos el primer elemento de la matriz a 100. Sin embargo, si ejecutamos este programa, encontraremos arr[0]que el valor efectivamente ha cambiado a 100. Esto se debe a que en Java, las matrices son objetos y modifyArraylos métodos reciben una referencia a la matriz, por lo que las modificaciones a la matriz afectarán a la matriz original.

A pesar de este comportamiento aparentemente de paso por referencia en Java, de hecho, Java sigue siendo de paso por valor. El método recibe una copia de la referencia, no la referencia original en sí. Esto significa que dentro del método, si reasignamos el parámetro a un nuevo objeto, la referencia original no se verá afectada. Por ejemplo:

public class ReferencePassingDemo2 {
    
    
    public static void main(String[] args) {
    
    
        StringBuilder str = new StringBuilder("Hello");
        modifyString(str);
        System.out.println("str = " + str);
    }

    public static void modifyString(StringBuilder s) {
    
    
        s = new StringBuilder("World");
    }
}

En este ejemplo, aunque los parámetros modifyStringse reasignan dentro del método s, el valor de sigue siendo "Hola" maindentro del método . strEsto se debe a que modifyStringel método recibe struna copia del archivo, no la referencia original.

Paso de parámetros en Java

En Java, ya sea un tipo de datos básico o un objeto, los parámetros se pasan por valor. Esto se debe a que el paso de parámetros en realidad pasa una copia del valor del parámetro, independientemente de si el parámetro es un tipo de datos primitivo o una referencia de objeto.

Cuando pasamos un objeto a un método, el método recibe una copia de la referencia al objeto. Esta copia de referencia apunta al mismo objeto, por lo que podemos modificar el estado del objeto dentro del método, pero no la referencia en sí.

en conclusión

En Java, la única forma de pasar parámetros es por valor. Ya sea un tipo de datos básico o un objeto, el método recibe una copia del valor del parámetro. Es por eso que a menudo se oye hablar de pasar por valor en Java, en lugar de pasar por referencia.

Comprender la diferencia entre pasar por valor y pasar por referencia es crucial para escribir programas Java correctos. Al utilizar métodos, debemos saber claramente cómo se pasan los parámetros del método para evitar confusiones y errores innecesarios.

Supongo que te gusta

Origin blog.csdn.net/weixin_42373241/article/details/132732090
Recomendado
Clasificación