¿Qué sucede cuando se cambia un literal de cadena? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Es Java "paso por referencia" o "paso por valor"? 78 respuestastoUpperCase en Java no funciona 5 respuestas

Quiero cambiar un literal de cadena a mayúscula. Aquí está mi código:

    // a and b are the same literal 
    String a = "Test";
    String b = "Test";
    // now I want to change all b's letter 
    // into uppercases, but fail.
    b.toUpperCase();
    System.out.println("a = " + a + ", " + "b = " + b);
    // print: a = Test, b = Test

    String c = "Test1";
    System.out.println("c = " + c + " , c.toUpperCase() = "
                + c.toUpperCase());
    // print: c = Test1 , c.toUpperCase() = TEST1

    // change letters of "Test" literal 
    // into uppercase and success
    System.out.println("Test".toUpperCase());
    // print: TEST

Mi pregunta es: 1.b no se puede cambiar a mayúscula, peroc y"Test" lata. ¿Por qué

Lo que sé es: 1.a yb referencia al mismo objeto en el conjunto de cadenas. 2. La cadena es inmutable, pero no parece relevante para esta pregunta.

Respuestas a la pregunta(7)

Su respuesta a la pregunta