my dog learned polymorphism*
The moose likes Beginning Java and the fly likes Doubt on == Vs equals Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCA/OCP Java SE 7 Programmer I & II Study Guide this week in the OCPJP forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Doubt on == Vs equals" Watch "Doubt on == Vs equals" New topic
Author

Doubt on == Vs equals

Faraz Alig
Greenhorn

Joined: Mar 14, 2010
Posts: 24
Hi,

Just to check if the two string objects String1 and String2 are same, we use the statement


And to check the if the two String objects have the same content, we use the statement


I guess if for any set of objects if A is true then B automatically becomes true. Is this statement hold good all the times?

Thanks,
Faraz
Costi Ciudatu
Ranch Hand

Joined: Oct 24, 2006
Posts: 74
From the JavaDoc of java.lang.Object.equals():

public boolean equals(Object obj)
Indicates whether some other object is "equal to" this one.
The equals method implements an equivalence relation on non-null object references:

It is reflexive: for any non-null reference value x, x.equals(x) should return true.
It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
For any non-null reference value x, x.equals(null) should return false.


If String1 == String2, than those are two references of the same object, so you're in the x.equals(x) situation -- which is true "by contract".
Mike Simmons
Ranch Hand

Joined: Mar 05, 2008
Posts: 3018
    
  10
Note that quote also hints at the one exception to Faraz' statement: if string1 and string2 are both null, then statement A is true, but B will throw a NullPointerException.

Oh, and also A talks about String1 and String2, while B talks about string1 and string2, which are, as far as the Java compiler is concerned, completely unrelated things. Capitalization matters, so please pay attention to it.
Yogesh Gnanapraksam
Ranch Hand

Joined: Dec 17, 2009
Posts: 133
Just to check if the two string objects String1 and String2 are same, we use the statement

if there are TWO string objects then the statement
String1 == String2 is going to return false.

So if you are sure there are TWO string objects then String1 == String2 should not be used.
This should be considered only to find out whether the two references are pointing to the same object.

Or you can say ..
Just to check if the two string references String1 and String2 are same, we use the statement
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14279
    
  21

Faraz Alig wrote:I guess if for any set of objects if A is true then B automatically becomes true. Is this statement hold good all the times?

If you compare a String object with itself (by calling equals()) then obviously the result will always be true.
 
Don't get me started about those stupid light bulbs.
 
subject: Doubt on == Vs equals