Categorías
Basics

¿Otro «Java pasa por referencia o por valor»?

Esta es una pregunta clásica de la entrevista que confunde a los desarrolladores principiantes de Java. En esta publicación usaré un ejemplo y algún diagrama para demostrar que: Java es paso por valor.

1. Algunas definiciones

Pasar por valor: hacer una copia en la memoria del valor del parámetro actual que se pasa.
Pasar por referencia: pasar una copia de la dirección del parámetro actual.

Java siempre se pasa por valor. Los tipos de datos primitivos y la referencia de objetos son solo valores.

2. Pasar variable de tipo primitivo

Dado que Java se pasa por valor, no es difícil entender que el siguiente código no intercambiará nada.

swap(Type arg1, Type arg2) {
    Type temp = arg1;
    arg1 = arg2;
    arg2 = temp;
}

3. Pasar variable de objeto

Java manipula objetos por referencia y todas las variables de objeto son referencias. Sin embargo, Java no pasa los argumentos del método por referencia, sino por valor.

La pregunta es: ¿por qué se puede cambiar el valor de miembro del objeto?

Código:

class Apple {
	public String color="red";
}
 
public class Main {
	public static void main(String[] args) {
		Apple apple = new Apple();
		System.out.println(apple.color);
 
		changeApple(apple);
		System.out.println(apple.color);
	}
 
	public static void changeApple(Apple apple){
		apple.color = "green";
	}
}
  ¿Qué es Servlet Container?

Dado que la referencia original y copiada hacen referencia al mismo objeto, el valor del miembro cambia.

Producción:

red
green

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *