أنشئ حسابًا أو سجّل الدخول للانضمام إلى مجتمعك المهني.
String s1 = "abc"; String s2 = "abc"; System.out.println("s1 == s2 is:" + s1 == s2);
Question: String s1 = "abc";
String s2 = "abc";
System.out.println("s1 == s2 is:" + s1 == s2);
Answer: false
Explanation: This simply requires knowledge of operator precedence.
+ has a higher predence than ==
So we deal with the + operator first.
The solution is arrived at by the following way:
Step1).First comes the + operator
"s1 == s2 is:" + s1
The concatenation of the string "s1 == s2 is:" and the value of s1 yields :
s1 == s2 is:abc, which is again a string.
Step2).Next comes the == operator
The == operator has now two operands.
One operand is the string that we got in Step1, which is s1 == s2 is:abc and the other operand is the value of s2 which is abc.
So, the == operator now compares the value of the two operands.
i.e. compares the strings s1 == s2 is:abc and abc
These are two diffrent string values.
So the boolean value returned is false.
Hi Mr. Khan,
The output of your mentioned code is:
s1 == s2 is:true
Now the question is how and why?
In Java we take care of String values in a very different way because in Java String values are the part of an Object of type “String” and this object resides in a memory which is called String pool (part of heap memory; dedicated for String objects).
In your code, you mentioned…
1. String s1 = “abc”;
2. String s2 = “abc”;
3. s1 == s2
Here “==” (equal operator) is checking the reference of these two objects, whether they are pointing to the same object or not. As we all know that in Java reference variables are doing great job in the absences of pointers.
In first line of code one is creating an object of class “java.lang.String” where the reference variable is “s1” and “abc” is the value of that object.
In2nd line of code, one is again trying to follow the same procedure however this time Java will check the “String pool memory” for an object who has the same value; “abc” and then java will not create any object but yes it will allow the s2 ref variable to point to the same object which is being pointed by the ref variable s1.
Let’s come to last line of the code, here == operator is now generating “true” as an output because both ref variables are pointing to the same object as I explained above.
You can find the same output by using “public boolean equals(String obj)” method of java.lang.String class. But it will compare the contents or values of two objects. Actually this method is the overridden version of equals() method of class java.lang.Object class.
Regards:
Naveen Kr. Sharma
s1 == s2 is:false
s1 and s2 are two different strings with the same value. Thus s1 == s2 returns false and only s1.equals(s2) would return true.
خطأ طبعا هو احنا بنقارن s1مع s2 ليه هو المفرض تكون .equal
It is false since you are comparing
s1 == s2 is:abc with abc
try
String s1 = "abc"; String s2 = "abc";
System.out.println("s1 == s2 is:");
System.out.println( s1==s2);
or
String s1 = "abc"; String s2 = "abc"; System.out.println("s1 == s2 is:" + s1.equals(s2));
it wll print false at the consol, because this boolean expression does'nt compare the tow strings , but it check if the both refere to the same location at the memory or not, but the comparison will by using .equals or equalsignorecase method
Both Strings pointing from string constant pool in the heap memory.Due to that same address is pointed to both strings.Hence the boolean function true
false
In Java Object orinted programming we have special case to deal with String class
- Object declaration may be done with one of the following
String name="abc" ; Vs String name=new String("abc");
the first way check first in literal pool place in memory if there is an old reference to this value(abc) case sensitive if exist it will reference to the same place if not it will reference to new place.
the second way with new keyword will register and reference new place in memory ignored literal pool values.
when using == with String we check for reference equality
when use .equals we check for values equality
So your result will be s1 == s2 is: true ==> according to s1 and s2 refernce on the same place in the memory