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)
2
respuestas

[Duda] Mismo objeto en la memoria

No logró comprender está frase: "En Java, es posible comparar dos Strings utilizando el operador ==. Sin embargo, este operador solo verifica si las dos variables apuntan al mismo objeto en la memoria, no si el contenido de las Strings es igual." Tiene que ver con Stack y Heap? Hay algún ejemplo que me puedan dar en el cual haya dos variables que apunten al mismo objeto en memoria? Desde ya, gracias!

2 respuestas
solución!

Hola Kevin,

Te explico con un ejemplo:

public class Comparacion {
    public static void main(String[] args) {
        String s1 = "HolaMundo";
        String s2 = "HolaMundo";
        String s3 = new String("HolaMundo");
        
        System.out.println(s1 == s2);  // true
        System.out.println(s1 == s3);  // false
        System.out.println(s1.equals(s3));  // true
    }
}

s1 y s2:

El valor de ambas es "HolaMundo". En Java, las String literales se almacenan en un pool de cadenas dentro de la Heap, lo que significa que si dos cadenas tienen el mismo valor literal y se crean de la misma forma, apuntarán al mismo objeto en memoria. ( Para optimizar recursos ) Entonces, s1 == s2 es true porque ambos apuntan al mismo objeto.

s3: Se crea explícitamente con new String("HolaMundo"), lo que fuerza a Java a crear un nuevo objeto en la Heap. Aunque s3 tiene el mismo contenido que s1, apunta a un objeto diferente en memoria. Por lo tanto, s1 == s3 es false porque están en ubicaciones diferentes en la memoria. Sin embargo, s1.equals(s3) es true porque compara el contenido de las cadenas, no sus referencias , es por esta razon que no es recomendable usar "==". En este ejemplo sencillo no pasa nada pero imaginate en cientos de lineas de codigo.

Espero haber ayudado. Si fue asi por favor marca como solucionado.

Tu explicación fue excelente, me quedó muy claro, marco como solucionado, muchas gracias!!!