Getting strange output when printing result of a string comparison
I am facing a problem with this line (commented below):
System.out.println("Using == ::"+s3==s4)
which outputs false
.
However, System.out.println(s3==s4)
outputs true
.
Now, I am not able to understand why I am getting this result:
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
Solution 1:
You're missing a set of brackets:
System.out.println("Using == ::" + (s3==s4));
In your version, "Using == ::" + s3
is being compared via ==
to s4
, which isn't what you want.
In general, +
has a higher precedence than ==
, which is why "Using == ::" + s3==s4
is being evaluated as ("Using == ::" + s3) == s4
.
Solution 2:
You are using this code:
System.out.println("Using == ::"+ s3==s4);
Which is being evaluated as:
System.out.println( ("Using == ::" + s3) == s4);
Hence you are getting false as output.
Reason is that as per the operator precedence +
is higher than ==
as per this Operator Precedence
table: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
As other answers say you need to use brackets enclosing your boolean expression:
System.out.println("Using == ::" + (s3==s4));
Solution 3:
The line is correct:
"Using == ::"+s3
is not equals to s4
You'll need to change your code:
"Using == ::"+(s3==s4)
edit: The output of the give code is:
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