This week's book giveaway is in the Servlets forum.
We're giving away four copies of Murach's Java Servlets and JSP and have Joel Murach on-line!
See this thread for details.
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes The Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "The " == " sign is confusing...." Watch "The " == " sign is confusing...." New topic
Author

The " == " sign is confusing....

Ferdinand Mcelmarry
Greenhorn

Joined: Oct 15, 2000
Posts: 3

hi
Please read the foll..what will be the o/p..i am a little confused
-----
1)
class qq
{
public static void main(String as[])
{
if("String".toString() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");

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

------------------------------
3)
if("String".replace('g','G') == "String".replace('g','G'))
System.out.println("Equal");
else
System.out.println("Not Equal");
--------------------
In the above examples ---
1) is printing "Equal"
2) In this case its printing "Not Equal"
3)In this case its printing "Not Equal"
But
The == sign checks if the 2 references r referring to the same object..right?
My question is
Where r the objects created and how does the examples actually work?
Does "String" has to do anything with it???
Will somebody explain..
Thanks ia advance
Preyas.

Sunitha Sounderrajan
Ranch Hand

Joined: Sep 12, 2000
Posts: 36
hello Preyas,
replace(oldchar, newchar)
--> returns a new string, generated by replacing every occurance of oldchar with newchar. If there is nothing to replace then the returned string is NOT a new string. it returns the same string. No new string is returned.
For Example-1.
if ("sample".replace('s', 'S') == "Sample")
System.out.println("No new Strings returned");
else
System.out.println("New Strings returned");
In Example-1 displays "New Strings returned".
Example-2.
if ("Sample".replace('s', 'S') == "Sample")
System.out.println("No new Strings returned");
else
System.out.println("New Strings returned");
In Example-2 displays "No new Strings returned".
In case of trim() the same rules holds good.
if (" Sample ".trim() == "Sample")
System.out.println("No new Strings");
else
System.out.println("New Strings");

--> displays "New Strings"
if ("Sample".trim() == "Sample")
System.out.println("No new Strings");
else
System.out.println("New Strings");
--> displays "No new Strings"

Hope this helps.
Sunitha. S

[This message has been edited by Sunitha Sounderrajan (edited October 21, 2000).]
P SOLAIAPPAN
Ranch Hand

Joined: Oct 20, 2000
Posts: 68
Hi,
Let me explaint some fundas about "==" , equals()

You can use "==" only for primitive value comparision not for
Object comparision. If you still use it for object comparision
it will try to compare the contents of object references which
are nothing but addresses.
String str1=new String("Hello"); // str1 is an address
String str2=new String("Hello"); // str2 is another address
// i.e str1 != str2

String object is formed using 2 methods

(a) usual method using "new" operator ,

String str1=new String("Hello");


(b) Using String literals
String str2="Hello";

(Here String pool concept is used where even if you create
any number of Strings having same literals"Hello" all
objects will point to the same address, only one literal
"Hello" will be stored in memory loation. No duplication is allowed
inside a string pool. All strings using above method will be stored
only in string pools)

(e.g)
String str2="Hello";
String str3="Hello";
String str4="Hello";
String str5="Hello";
.........

you run this code you will see the adresses are eual
(e.g)

if (str2==str3 && str4==str5)
System.out.println("Equal"); //will print "Equal"

"==" will not bother what those adress are refering to
simply it will say addresses (i.e object reference)


(e.g)
String str1=new String("Hello");
String str2="Hello";

if (str1==str2 )
System.out.println("Equal");
else
System.out.println("Not Equal"); //will print "Not Equal"
// here addresses are different

So always use equals() method of Object class for comparing objects.
euals() method will not compare the addresses but compares the contents
stored in addresses pointed by the reference.
if (str1.equals(str2) )
System.out.println("Equal"); //will print "Equal"
else
System.out.println("Not Equal");

Now let me come to u r problem

(i) "String".toString() this simply returns string literal"String"
both addresses are same
It is equivalent to say that "String"=="String" which is
always Equal(true).

(ii)" String ".trim() == "String" // Not Equal, diffrent addresses

"String" it is created in string pool address is returned.
" String ".trim() - Since Strings are immutable a new String
object will be created which is not in string pool here different
address is returned

(iii) "String".replace('g','G') == "String".replace('g','G')
Again same "immutable" as above


Try the following:

if(" String ".trim().equals( "String"))
System.out.println("Equal"); // prints equal

if("String".replace('g','G') .equals( "String".replace('g','G')))
System.out.println("Equal"); // prints equal


I hope , not bored u too much

Solaiappan
 
 
subject: The " == " sign is confusing....
 
Similar Threads
String == with a twist...
String
trim() and replace()
About String
String == (Abhilash mock)