Obtener resultados extraños al imprimir el resultado de una comparación de cadenas

Estoy enfrentando un problema con esta línea (comentado a continuación):

System.out.println("Using == ::"+s3==s4) 

que salidas false .

Sin embargo, System.out.println(s3==s4) resultado true .

Ahora, no puedo entender por qué obtengo este resultado:

 public class string { public static void main(String[] args){ String s3="Shantanu"; String s4=s3; String s1=new String("java"); String s2=new String("javaDeveloper"); System.out.println("Using Equals Method::"+s1.equals(s2)); System.out.println("Using Equals Method::"+s3.equals(s4)); System.out.println("Using == ::"+s3==s4);//Problem is here in this line System.out.println(s1+"Directly printing the s2 value which is autocasted from superclass to string subclass "); System.out.println("Directly printing the s1 value which is autocasted from superclass to string subclass "+s2); System.out.println(s3); } } 
 Output-Using Equals Method :: falso
 Usando el método de Equals :: true
 Usando == :: falso
 java Impresión directa del valor s2 que se autocaptura de la superclase a la subclase de cadena
 Impresión directa del valor s1 que se autocaptura desde la superclase a la subclase de cadena javaDeveloper

Te falta un par de corchetes:

 System.out.println("Using == ::" + (s3==s4)); 

En su versión, "Using == ::" + s3 se compara mediante == a s4 , que no es lo que desea.

En general, + tiene una precedencia mayor que == , por lo que "Using == ::" + s3==s4 se está evaluando como ("Using == ::" + s3) == s4 .

Usted está usando este código:

 System.out.println("Using == ::"+ s3==s4); 

Que se está evaluando como:

 System.out.println( ("Using == ::" + s3) == s4); 

Por lo tanto, obtiene como resultado falso .

La razón es que, según el operador, la precedencia + es mayor que == según esta tabla de Operator Precedence : http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

Como otras respuestas dicen que necesitas usar corchetes que encierran tu expresión booleana:

 System.out.println("Using == ::" + (s3==s4)); 

La línea es correcta:

"Using == ::"+s3 no es igual a s4

Deberás cambiar tu código:

 "Using == ::"+(s3==s4) 

editar: la salida del código de entrega es:

 Using Equals Method::false Using Equals Method::true false javaDirectly printing the s2 value which is autocasted from superclass to string subclass Directly printing the s1 value which is autocasted from superclass to string subclass javaDeveloper Shantanu