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

==, = and .equals

Steve Jensen
Ranch Hand

Joined: Sep 23, 2002
Posts: 126
Folks, I have a REALLY stupid question to ask.
Sorry for asking it. I know my posts are trivial at best, but please, if someone would explain it, that'd be marvellous.
I have read this in text books, but the concept just keeps escaping me, as though i can't wrap my head around it.
Just what is the difference between =, == and .equals.
My interpretation of it is:-
We use = only when assigning a value to an identifier, i.e. a value to a variable such as int number = 50.
== Errr, well, I THINK this means both sides of an expression give a boolean value of true if they are both equal in VALUE.
i.e., a =50, b=50
a == b will return true
if a = 50 and b= 60
a == b will return false

.equals - something about objects pointing to the same position in memory, but I haven't the foggiest on that, really. Can the .equals method only be used with Strings?
Any help would be greatly appreciated. :roll:
[ February 06, 2003: Message edited by: Steve Jensen ]

John Bonham was stronger, but Keith Moon was faster.
Barry Gaunt
Ranch Hand

Joined: Aug 03, 2002
Posts: 7729
Hi Steve,
1. "=" is used for assignment, you got that.
2. "==" is used to compare things. Two cases:
a) comparing primitives like your int a = 50, b = 50. "a==b" has a boolean value of true if the "boxes" a and b contain the same value.
b) comparing references to objects: if a and b refer to the same object, by same I mean identity then "a==b" is true.
Suppose Object a = new ABC() and Object b = a; then "a==b" is true.
Suppose Object a = new ABC() and Object b = new ABC(). Then "a==b" is false.
Let's make sure you understand those first before moving on to the .equals(Object) thing
-Barry
[ February 06, 2003: Message edited by: Barry Gaunt ]

Ask a Meaningful Question and HowToAskQuestionsOnJavaRanch
Getting someone to think and try something out is much more useful than just telling them the answer.
Manish Hatwalne
Ranch Hand

Joined: Sep 22, 2001
Posts: 2581

Have a look at this article, and see if it is of some help.
HTH,
- Manish
Marilyn de Queiroz
Sheriff

Joined: Jul 22, 2000
Posts: 9053
    
  12
Folks, I have a REALLY stupid question to ask.

This is not a stupid question. Many people have problems with this.

Just what is the difference between =, == and .equals.
My interpretation of it is:-

We use = only when assigning a value to an identifier, i.e. a value to a variable such as int number = 50.

You are correct.
You can also assign expressions like:

boolean trueOrFalse = ( 1 < 2 ) && ( x < 4 );

You can also assign objects like:

1 String stringOne = "Hello " ;
2 String stringTwo = "World" ;
3 String stringThree = stringOne + stringTwo ;
4 stringTwo = "Steve" ;

If you put line 4 in front of line 3, you will get "Hello Steve" instead of "Hello World" because you made the variable (identifier) point to the String "Steve" instead of pointing to the String "World".

== Errr, well, I THINK this means both sides of an expression give a boolean value of true if they are both equal in VALUE.

== returns true if both things are equal to the same thing. This is true for primitives like int and also for objects if the two objects are the same object. For example,
Object a = new Object() ;
Object b = a ;

In this case you just told the computer that 'b' is the exact same object as 'a' by assigning 'a' to 'b'. Not only are they equal in value, but 'b' and 'a' are both pointing to the exact same object.

We can say
Object c = a ;
Now our same object has three names, 'a', 'b', and 'c'.

This is what they mean when they talk about variables (also known as identifiers or sometimes as references) pointing to the same position. Regardless of the name, it's still pointing to the same object. (The object is in the memory)

.equals - something about objects pointing to the same position in memory, but I haven't the foggiest on that, really. Can the .equals method only be used with Strings?

The equals() method can be used with any object, not only with Strings. But, like Barry said, it is important that you understand the first two concepts before we can proceed to this one.
[ February 06, 2003: Message edited by: Marilyn de Queiroz ]

JavaBeginnersFaq
"Yesterday is history, tomorrow is a mystery, and today is a gift; that's why they call it the present." Eleanor Roosevelt
Shashank Gokhale
Ranch Hand

Joined: Jan 07, 2003
Posts: 92
Steve
The = sign is used for assignments
int a=5;
float a=2.01f;
String s="Abacus";
String str=s;
are all valid statements. So the '=' is used to assign primitives (that is int, boolean, float, double, short, char, long, bye) or objects (String, user defined classes)
When used to assign an object, what you are doing is assigning a value to a reference. So in
String str=s; you are saying assign the value of the reference s to the reference str. And the value of a reference is the address of that object it is assigned to.
'==' returns a boolean if the primitives (int, boolean, char, etc) or references (s, str, variables that point to objects) are equal (that is whether they are equal in value as far as primitives are concerned and whether they point to the same object.) So if
int i=20;
int j=20;
int k=21;
String s0="Sam";
String s1="Sam";
String s2=new String("Sam";
then
i==j is true
i==k is false
i==s0 is illegal, incompatible types
s0==s1 is true because in effect both s0 and s1 point to the same object because the compiler sees "Sam" already in memory and since new is not used to define s1, it assigns the reference s1 to the same object "Sam, which already has the reference s0. So s0 and s1 point to the same object (same address)
s1==s2 is false because the new keyword used in defining s2 causes a completely new reference to be created, and so s1 and s2 do not have the same address values
'.equals(Object)' is used to return a boolean that is true if the values of the objects are true, so
s0.equals(s1) is true
s1.equals(s2) is true
because all the objects have the value "Sam"
So in summary
'=' is used for assignment
== is used to compare values of primitives or references
.equals() is used to compare values of objects
Hope its clear


May the force of the Java be in all of us !!!
Steve Jensen
Ranch Hand

Joined: Sep 23, 2002
Posts: 126
So far so good
Cheers folks, all of you, who took the trouble to reply.
Guess i'll just put the .equals on the back burner for a bit, then.
Thomas Paul
mister krabs
Ranch Hand

Joined: May 05, 2000
Posts: 13974
The equals method has a default behavior inherited from the Object class. The default behavior is to do exactly what the == does.
Any method can override the equals method if they choose to. The String class, for example, has overridden the equals so that you can compare the contents of two Strings.


Associate Instructor - Hofstra University
Amazon Top 750 reviewer - Blog - Unresolved References - Book Review Blog
Elouise Kivineva
Ranch Hand

Joined: Feb 07, 2002
Posts: 154
My first programming teacher taught us to read code out loud in normal speech.
A = 7
That's "A receives the value 7"
A == 7
That�s "A is exactly 7"
Marilyn de Queiroz
Sheriff

Joined: Jul 22, 2000
Posts: 9053
    
  12
Any class can override the equals method if they choose to. The String class, for example, has overridden equals() so that you can compare the contents of two Strings.

The equals() method is a little more complex than '=' or "==".

As Thomas said, the default equals() method which is found in the Object class is identical to "==". In other words, object1.equals( object2 ) will tell you if object1 and object2 are really the exact same object. For example, if my address is 123 MyStreet and you lived in the same house with me, I could say
Object myAddress = "123 MyStreet" ;
Object yourAddress = myAddress ;

Now myAddress and yourAddress point to the same house (the same Object). In this case, myAddress == yourAddress is true. myAddress.equals( yourAddress ) is also true.

However, some classes override the equals() method so that equals() will return true if they contain equivalent stuff, even if they are not the exact same object. This is true for many of the classes in the basic java classes, like the String class for example. However, if you create a new class (like class Address, for example), it would need to contain an equals() method which overrides the equals() method of Object if you wanted people to be able to compare Addresses of equal value. Otherwise equals() would only tell you if it were the exact same Address object.

Integer twenty = new Integer(20);
Integer twentey = new Integer(20);

twenty == twenty returns false
However
twenty.equals( twentey ) returns true.

This is because the Integer class has overridden the equals() method so that two Integers with the same value will be "equal" even though they are not the same Integer object (because you used "new" twice).

Now if you assign
twentey = twenty ;
you will see that twentey and twenty are now the exact same object, so
twenty == twentey returns true and
twenty.equals( twentey ) also returns true.

Clear as mud?
[ February 13, 2003: Message edited by: Marilyn de Queiroz ]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: ==, = and .equals