Memoria: primitivos vs referencia

Memoria: primitivos vs referencia

  • Primitivos: se copian por valor.
  • Referencia: se copian por referencia.

Primitivos: copiar por valor

public class Main {
    public static void main(String[] args) {
    byte x = 1;
    byte y = x;
    System.out.println(y);
    }
}

Primitivos: cambio en x

public class Main {
    public static void main(String[] args) {
    byte x = 1;
    byte y = x;
    x = 2;
    System.out.println(y);
    }
}

Primitivos: ¿qué pasa con y?

  • x e y están en lugares distintos.
  • Cambiar x no cambia y.

Ahora: tipo de referencia (Point)

  • Clase Point está en java.awt.
  • IntelliJ agrega el import.

Referencia: crear point1

import java.util.Date;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        Point point1 = new Point(1,2);
    }
}

Referencia: point2 apunta a point1

import java.util.Date;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        Point point1 = new Point(1,2);
        Point point2 = point1;
    }
}

Referencia: cambio en el objeto

import java.util.Date;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        Point point1 = new Point(1,2);
        Point point2 = point1;
        point1.x = 2;
    }
}

Referencia: imprimir point2

import java.util.Date;
import java.awt.*;

public class Main {
    public static void main(String[] args) {
        Point point1 = new Point(1,2);
        Point point2 = point1;
        point1.x = 2;
        System.out.println(point2);
    }
}

¿Por qué pasa esto?

  • point1 no guarda el Point: guarda la dirección (referencia).
  • point2 = point1 copia la referencia, no el objeto.
  • Entonces point1 y point2 apuntan al mismo objeto.

Idea clave

  • Primitivos → por valor → independientes

  • Referencia → por referencia → comparten objeto