Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Java (http://www.velocityreviews.com/forums/f30-java.html)
-   -   The behavior of "equals" method of Arrays.asList() implementation (http://www.velocityreviews.com/forums/t750598-the-behavior-of-equals-method-of-arrays-aslist-implementation.html)

Alex J 06-28-2011 09:19 AM

The behavior of "equals" method of Arrays.asList() implementation
 
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!

Stefan Ram 06-28-2011 10:18 AM

Re: The behavior of "equals" method of Arrays.asList() implementation
 
Alex J <vstrength@gmail.com> writes:
>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.


Lew 06-28-2011 11:29 AM

Re: The behavior of "equals" method of Arrays.asList() implementation
 
Eric Sosman wrote:
> Alex J wrote:
>> 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.

>
> Look again. The nested class extends AbstractList, and
> inherits the equals() implementation from it.


Not only that, but
<http://download.oracle.com/javase/6/docs/api/java/util/List.html#equals(java.lang.Object)>
so of course it worked, and it had better be safe or the implementation is
fubared.

--
Lew
Honi soit qui mal y pense.
http://upload.wikimedia.org/wikipedi.../c/cf/Friz.jpg

Roedy Green 06-28-2011 05:04 PM

Re: The behavior of "equals" method of Arrays.asList() implementation
 
On Tue, 28 Jun 2011 02:19:02 -0700 (PDT), Alex J <vstrength@gmail.com>
wrote, quoted or indirectly quoted someone who said :

>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.

Arne Vajhøj 07-22-2011 12:36 AM

Re: The behavior of "equals" method of Arrays.asList() implementation
 
On 6/28/2011 6:18 AM, Stefan Ram wrote:
> Alex J<vstrength@gmail.com> writes:
>> 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 obvious answer.

>> 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.


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

Arne




All times are GMT. The time now is 02:38 AM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57