It's not a secret anymore!*
The moose likes Java in General and the fly likes Different behaviour with string objects Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Different behaviour with string objects" Watch "Different behaviour with string objects" New topic
Author

Different behaviour with string objects

Rajesh Tarigopula
Greenhorn

Joined: Oct 19, 2004
Posts: 8
Hi,
The string objects behaving differently in differnt situations. Plase find the following code giving differnt result.

if("String".replace('t','t') == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");

/*************************************/

if("String".replace('g','G') == "String".replace('g','G'))
System.out.println("Equal");
else
System.out.println("Not Equal");

/*************************************/

if(" String ".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");

Please let me know why I am getting different results in the above three sinarios.

Thanks & Regards
Rajesh
Nigel Browne
Ranch Hand

Joined: May 15, 2001
Posts: 673
When you want to compare the actual content of an object for equivalence you should use the method equals(). This is because although the contents of your Strings are the same, == checks that the object references are equivalent. Which is not the case in all three of your examples.
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24183
    
  34

Originally posted by Pandoo Go:

if("String".replace('t','t') == "String")


Here, you're asking "replace" to perform a null operation -- i.e., a replacement that wouldn't change the String. The standard implementation of replace() optimizes this case and simply returns the original String. Two identical literals always refer to the same object, so this will print "Equal".


if("String".replace('g','G') == "String".replace('g','G'))


Each call to replace() will create a new String. These two new Strings will have the same contents, but won't be the same physical object, so this will print "Not Equal".


if(" String ".trim() == "String")


The call to trim() will return a new String, which won't be the same object as the literal "String", so this is another "Not Equal".

As a previous poster noted, "==" tells you if two Strings are the same physical object in memory, while the equals() methods compares the contents and returns true as long as the two Strings contain the same characters in the same order.


[Jess in Action][AskingGoodQuestions]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Different behaviour with string objects
 
Similar Threads
String Equality
String Question
String Methods
Strings
Java Strings