Reescritura del código fuente de cadenas
Esta es una pregunta básica. Estas confundiendo = con iguales.
= =Esta operación compara si los valores de dos variables son iguales. Para las variables de referencia, indica si las direcciones de las dos variables almacenadas en el montón son las mismas, es decir, si el contenido de la pila es el mismo. Ahora eres una cadena. Si se compara con el signo ==, se devolverá falso porque se crean dos objetos y sus ubicaciones de direcciones en la memoria son diferentes.
Si las dos variables representadas por la operación igual son referencias al mismo objeto, es decir, si el contenido del montón es el mismo, por lo que se pueden comparar siempre que no se reescriban.
Por lo tanto, la última oración debe cambiarse a esta:
system out . println(S3 . equals(S4));