ticket - java printing
Obtención de resultados extraños al imprimir el resultado de una comparación de cadena (3)
Estoy enfrentando un problema con esta línea (comentado abajo):
System.out.println("Using == ::"+s3==s4)
que da salida a false
.
Sin embargo, System.out.println(s3==s4)
resultado true
.
Ahora, no puedo entender por qué estoy obteniendo 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::false Using Equals Method::true Using == ::false java Directly 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
Está utilizando este código:
System.out.println("Using == ::"+ s3==s4);
Que se está evaluando como:
System.out.println( ("Using == ::" + s3) == s4);
Por lo tanto, está obteniendo falso como salida.
La razón es que según la prioridad del operador +
es mayor que ==
según esta tabla de Operator Precedence
: precedence
Como otras respuestas dicen que necesita usar corchetes que encierran su expresión booleana:
System.out.println("Using == ::" + (s3==s4));
La línea es correcta:
"Using == ::"+s3
no es igual a s4
Tendrás que cambiar tu código:
"Using == ::"+(s3==s4)
Editar: La salida del código de dar 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
Te estás perdiendo un conjunto de paréntesis:
System.out.println("Using == ::" + (s3==s4));
En su versión, "Using == ::" + s3
se compara a través de ==
con s4
, que no es lo que desea.
En general, +
tiene una precedence más alta que ==
, por lo que "Using == ::" + s3==s4
se evalúa como ("Using == ::" + s3) == s4
.