String de Java objetos igualdad y la referencia

Morez:

Tengo el siguiente código:

public class Test{

     public static void main(String []args){
        String x = "a";
        String y = "a";

        System.out.println(System.identityHashCode(x) == System.identityHashCode(y)); //true
        System.out.println(x.hashCode() == y.hashCode()); //true

        y = y+"b";

        System.out.println(x); // "a"
        System.out.println(y); // "ab"

        System.out.println(System.identityHashCode(x) == System.identityHashCode(y)); //false
        System.out.println(x.hashCode() == y.hashCode()); //false
     }
}

En primer lugar creo Cuerdas 2 x e y. Entonces puedo comprobar sus hashcodes y son iguales por lo que significa que son un objeto y que apuntan a una posición de memoria. Pero cuando cambio el valor Y, el valor de x no va a cambiar. Si puedo comprobar su código hash de nuevo, son diferentes por lo que significa 2 objetos diferentes y 2 posiciones de memoria diferentes. ¿Por qué ocurre esto? ¿Por qué no cambio x cuando y cambios? (Porque sólo estamos cambiando el contenido de una memoria)

Solía código hash como esta pregunta sugiere.

Actualización: Mi confusión era por 2 razones:

a) pensé mismos hashcodes significan mismos objetos (se puede echar un vistazo a esta y esta pregunta para la explicación detallada por qué estoy equivocado).

b) Las cadenas son inmutables y si se crean los cambios de valores, las nuevas cadenas (como se explica en las respuestas a continuación.)

Mureinik:

Las cadenas en Java son inmutables. Usted no está "cambiando el valor de y", se está creando una nueva cadena y asignándole a y. Puesto que no se ha asignado a ninguna otra cosa x, todavía hará referencia a la cadena anterior que tenía allí.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=396897&siteId=1
Recomendado
Clasificación