File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes one more with Strings ( == and equals) Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "one more with Strings ( == and equals)" Watch "one more with Strings ( == and equals)" New topic
Author

one more with Strings ( == and equals)

manasa teja
Ranch Hand

Joined: May 27, 2002
Posts: 325
Please observe the following code:
String a = new String("java");
String b = new String("java");
System.out.println(a == b) // this prints false
System.out.println(a.equals(b)); // prints true
String c = "java";
String d = "java";
System.out.println(c == d) // this prints true
System.out.println(c.equals(d)); // prints true
Can you please explain me the reason for this?
thanks!
Murthy


MT
Karen Leoh
Ranch Hand

Joined: Dec 03, 2001
Posts: 40
Hi Murthy
String a = new String("java") creates a String object. System.out.println(a == b) is false as it does shallow comparison. It compares Objects instead of the content of the object.
The method equals() does deep comparison. It compares the content of the String. Thus,
System.out.println(a.equals(b)) prints true.
As for
String c = "java";
String d = "java";
since there's no "new" used, it does not create a new object instead is pointing to the same string in the string pool. Since it's the same string, == will return true.
I hope this brief explanation helps a bit. You should do a search here. This topic has been discussed a lot here. I'm sure the explanations provided by the other ranchers are much better.


--------------------<p>Karen Leoh<br />Sun Certified Programmer for Java™ 2 Platform
manasa teja
Ranch Hand

Joined: May 27, 2002
Posts: 325
Karen, thanks for your nice explanation.
Hence, Can I say that, whenever we use "new" to create the same string ( like "java" in this example), == always returns FALSE as it compares the objects.
please correct me , if I am wrong and give some example.
[ June 04, 2002: Message edited by: Murthy Kompella ]
Corey McGlone
Ranch Hand

Joined: Dec 20, 2001
Posts: 3271
Originally posted by Murthy Kompella:
Hence, Can I say that, whenever we use "new" to create the same string ( like "java" in this example), == always returns FALSE as it compares the objects.

That is correct...initially. The String class has a method called "intern" which allows you to reuse Strings from the pool. Take a look at this example:

In short, however, whenever you use the keyword "new," a new object is created which, therefore, has a unique reference. As such, using "==" on it with any other reference will return false.
Corey


SCJP Tipline, etc.
manasa teja
Ranch Hand

Joined: May 27, 2002
Posts: 325
that's a nice explanation.
In addition to that, just to share with everybody,
I just referred java Api for Intern , which says

It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: one more with Strings ( == and equals)