The behavior of "equals" method of Arrays.asList() implementation

A

Alex J

Basically I wonder if it is safe to use equals for collections (and
junit's assertEquals in particular which in fact results in the
*.equals invocation).

One of collection instances I am working with is returned from
Arrays.asList(..) method invocation.
Sun JDK sources defines no equals method for
java.util.Arrays.ArrayList inner class so I guess it is not safe to
compare collections in that way.
Surprisingly, equals called from Arrays.ArrayList "magically" (I can't
find another word) checks the elements in the collection!
I tried to walk throug the sources by using "step into" in the
debugger, but it mysteriously transfer control to the equals method of
my class (and yes, I have JDK sources attached, e.g. I can walk
through implementation of certain String method).

So the first question is: whether it is safe to use equals for *all*
the JDK's collections?
The second question is whether JVM adds "hidden" implementation in
certain places and Arrays helper List implementation is one of those,
so I may expect Arrays.asList(...) implementation behave in the same
way on different JDKs?

Thanks in advance!
 
S

Stefan Ram

Alex J said:
So the first question is: whether it is safe to use equals for *all*
the JDK's collections?

What is »safe« supposed to mean in this case?

The »equals« methods of the collections behave
as documented in their Java SE docs, just like
every other collection method does.
The second question is whether JVM adds "hidden" implementation in
certain places

The compiler sometimes adds constructors so that
the implementation behaves as specified in the
JLS, but never »equals« methods.
 
R

Roedy Green

Basically I wonder if it is safe to use equals for collections (and
junit's assertEquals in particular which in fact results in the
*.equals invocation).

Every object implements equals. Sometimes it amounts to == which many
not be what you want.
--
Roedy Green Canadian Mind Products
http://mindprod.com
One of the curses of the computer age is manufacturers now design
home appliances to die on the very day the warranty expires.
It is deliberate waste in the service of mindless profit.
 
A

Arne Vajhøj

What is »safe« supposed to mean in this case?

The »equals« methods of the collections behave
as documented in their Java SE docs, just like
every other collection method does.

The obvious answer.
The compiler sometimes adds constructors so that
the implementation behaves as specified in the
JLS, but never »equals« methods.

The compiler is not the JVM, but your interpretation may
be correct that his question included compiler.

Arne
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top