Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
4
respuestas

[Duda] ¿Valor o referencia?

Hola.

Respecto a las variables en general, ¿Puedo entender que la referencia es válida para variables del tipo clase y no para las de tipo primitivo? ¿Las de tipo primitivo si guardan el valor y no un a referencia a memoria?

Pregunto esto con base a una duda que me surgió luego de ver la clase y a este análisis que efectué.

public class CrearCuenta {
    public static void main(String[] args) {

        //-------------------------------------------------------------------

          Cuenta primeraCuenta = new Cuenta();
          Cuenta segundaCuenta = new Cuenta();

          //Asignación de valor a las variables (clase)

          primeraCuenta.saldo = 10;
          segundaCuenta.saldo = 20;

        //********

          System.out.println("Cuenta 1 --> " + primeraCuenta + " --- Cuenta 2 --> " + segundaCuenta);
          System.out.println("Cuenta 1 --> " + primeraCuenta.saldo + " --- Cuenta 2 --> " + segundaCuenta.saldo);

          segundaCuenta = primeraCuenta;

          System.out.println("Cuenta 1 --> " + primeraCuenta + " --- Cuenta 2 --> " + segundaCuenta);
          System.out.println("Cuenta 1 --> " + primeraCuenta.saldo + " --- Cuenta 2 --> " + segundaCuenta.saldo);

          segundaCuenta.saldo += 100;

          System.out.println("Cuenta 1 --> " + primeraCuenta + " --- Cuenta 2 --> " + segundaCuenta);
          System.out.println("Cuenta 1 --> " + primeraCuenta.saldo + " --- Cuenta 2 --> " + segundaCuenta.saldo);

          System.out.println();
          System.out.println();
          System.out.println();

          //Resultado en consola

//          Cuenta 1 --> Cuenta@6504e3b2 --- Cuenta 2 --> Cuenta@515f550a  ---------> Direcciones de memoria diferente por ser diferentes objetos
//          Cuenta 1 --> 10.0 --- Cuenta 2 --> 20.0
//          Cuenta 1 --> Cuenta@6504e3b2 --- Cuenta 2 --> Cuenta@6504e3b2  ---------> Direcciones de memoria iguales luego de asignar cuenta 1 a cuenta 2
//          Cuenta 1 --> 10.0 --- Cuenta 2 --> 10.0
//          Cuenta 1 --> Cuenta@6504e3b2 --- Cuenta 2 --> Cuenta@6504e3b2
//          Cuenta 1 --> 110.0 --- Cuenta 2 --> 110.0


        //-----------------------------------------------------------------
          //Asignación de valor a las variables (primitivas)

          int primeraCuentaSaldo = 10; 
          int segundaCuentaSaldo = 20;

          //********

          System.out.println("Cuenta 1 --> " + primeraCuentaSaldo + " --- Cuenta 2 --> " + segundaCuentaSaldo);

          segundaCuentaSaldo = primeraCuentaSaldo;

          System.out.println("Cuenta 1 --> " + primeraCuentaSaldo + " --- Cuenta 2 --> " + segundaCuentaSaldo);

          segundaCuentaSaldo += 100;

          System.out.println("Cuenta 1 --> " + primeraCuentaSaldo + " ---Cuenta 2 --> " + segundaCuentaSaldo);

          //Resultado en consola

//          Cuenta 1 --> 10 --- Cuenta 2 --> 20
//          Cuenta 1 --> 10 --- Cuenta 2 --> 10
//          Cuenta 1 --> 10 ---Cuenta 2 --> 110  --------------------------> Cuenta 1 mantiene su valor, no la referencia del valor de Cuenta 2

    }
}

En el caso de la variable de tipo clase si hay un valor referenciado, pero en las variable de tipo Integer mantienen mantienen la referencia al valor propiamente dicho.

Agradezco me confirmen o no lo anterior.

Gracias

4 respuestas
solución!

Hola Tracy,

Gracias por compartir tu experiencia con nosotros, tienes mucha razón en tus apuntes.

Te recomiendo que puedes interactuar con el resto de nuestros compañeros por nuestro Discord, en virtud de que en Discord el alcance es mayor, la interacción es inmediata y llega a más compañeros y el foro solo quedaría para esclarecer cualquier duda que puedas tener sobre el contenido de los cursos.

De esa manera si tienes algún comentario, opinión, recomendación o algún consejo sea por el Discord, con certeza por ahí llegará a más personas.

Un saludo!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Hola Erick. Muchas gracias por sus comentarios.

Saludos.

Hola Tracy, he investigado un poco mas y te comento lo que se hasta ahora; las variables de tipo clase (también conocidas como objetos) almacenan una referencia a la instancia del objeto en la memoria, mientras que las variables de tipo primitivo almacenan directamente su valor en la memoria.

entonces una variable de tipo clase es la dirección de memoria de la instancia del objeto que se está utilizando, mientras que esto no es válido para las variables de tipo primitivo.

por ejemplo:

String miString = new String("Hola mundo!");

donde; miString es una variable de tipo String que almacena una referencia a la instancia del objeto String creado con la cadena "Hola mundo!" en la memoria.

mientras que una variable de tipo primitivo sería:

int miEntero = 42;

donde; miEntero es una variable de tipo int que almacena directamente el valor entero 42 en la memoria, en lugar de una referencia a una instancia de objeto.

gracias por hacer estas preguntas porque me permitió saber mas sobre el comportamiento de las intancias en java OO.

Hola Rafael.

Correcto. Veo que ambos lo hemos asimilado correctamente. Que bien.

Saludos.