Well... I of course agree my manual "==" instead of equals() was
wrong, but I guess nobody else has ever used EqualsBuilder with Long
fields... hard to believe, but hey.

Still, I find EqualsBuilder Javadoc and implementation misleading,
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/EqualsBuilder.html#append(java.lang.Object,%20java.lang.Object)
says it will use equals() method on objects, but when objects are
Long, it does not.

Or maybe this is a known pitfall of EqualsBuilder, and I just went in,
but this is still very confusing.

laurent

2007/12/17, Shawn Garner <[EMAIL PROTECTED]>:
>
> I know there are tools/plugins to catch it.
> Personally I don't make those mistakes (I make different ones) anymore.
>
> It tends to be those who are new to Java or switch programming languages 
> frequently.
> They are also not likely to use something like Findbugs.
>
> Nothing beats a compiler warning ;)
>
>
> Thanks,
> Shawn D. Garner
>
>
> > Date: Mon, 17 Dec 2007 12:58:22 +0000
> > From: [EMAIL PROTECTED]
> > To: [email protected]
> > Subject: Re: [lang] equalsBuilder unexplained wrong equality with 
> > java.lang.Longs ?
> >
> > On 17/12/2007, Shawn Garner <[EMAIL PROTECTED]> wrote:
> > >
> > > This is the number one programming error I've seen (not the only one 
> > > though).
> > >
> > > Most of the time it is controlling logic that never gets executed.
> > > I'm always curious as to why it is never caught and what it will do when 
> > > fixed.
> >
> > Try using Findbugs - that will report the error...
> >
> > > The problem is other programming languages do compare this way.  As well 
> > > as some expression languages.
> > > IMO Java should treat "==" as "object.equals" on objects and introduce 
> > > another operator for object pointer comparison like ".="
> > >
> > > I don't think we'll ever see it though because it affects a lot of 
> > > existing source code making it not backwards compatible.
> > >
> > > Shawn D. Garner
> > >
> > >
> > > > From: [EMAIL PROTECTED]
> > > > To: [email protected]; [EMAIL PROTECTED]
> > > > Date: Mon, 17 Dec 2007 04:32:44 -0500
> > > > Subject: RE: [lang] equalsBuilder unexplained wrong equality with 
> > > > java.lang.Longs ?
> > > >
> > > > Hello Laurent:
> > > >
> > > > This behavior is 'normal'. The concepts of object equality (the 
> > > > equals() method) and object identity (==) are different. The method ' 
> > > > equals()' defined in Object can be overridden by subclasses and defines 
> > > > if an object is 'equal' to another. Long overrides the equals method to 
> > > > check to see if the object passed in wraps the same primitive long 
> > > > value. OTOH, the == operator compares two object identities, that is, 
> > > > is the object on the left-hand side the same object as the one on the 
> > > > right-hand side. Even though two objects instances may be semantically 
> > > > equal (as in the example below), they are not the same object so fails 
> > > > the == comparison.
> > > >
> > > > For example:
> > > >
> > > > public class TestLongEquals extends TestCase {
> > > >
> > > >     public void testname() throws Exception {
> > > >         Long long1a = new Long(1);
> > > >         Long long1b = new Long(1);
> > > >         Assert.assertFalse(long1a == long1b);
> > > >         Assert.assertTrue(long1a.equals(long1b));
> > > >     }
> > > > }
> > > >
> > > > Gary
> > > > Seagull Software
> > > >
> > > > > -----Original Message-----
> > > > > From: Laurent Perez [mailto:[EMAIL PROTECTED]
> > > > > Sent: Sunday, December 16, 2007 3:17 PM
> > > > > To: Jakarta Commons Users List
> > > > > Subject: [lang] equalsBuilder unexplained wrong equality with 
> > > > > java.lang.Longs ?
> > > > >
> > > > > Hi !
> > > > >
> > > > > I'm struggling with a problem I don't understand, my equalsBuilder's
> > > > > isEquals seem to return false when dealing with Longs :
> > > > >
> > > > > I have a bean class UiTheme, with a property private Long id.
> > > > >
> > > > > The following equals builder will return false when this.id = 1 and
> > > > > rhs.id =  1 :
> > > > >
> > > > >         public boolean equals(Object object) {
> > > > >                 if (!(object instanceof UiTheme)) {
> > > > >                         return false;
> > > > >                 }
> > > > >                 UiTheme rhs = (UiTheme) object;
> > > > >                 return new
> > > > > EqualsBuilder().appendSuper(super.equals(object)).append(this.id,
> > > > > rhs.id).isEquals();
> > > > >         }
> > > > >
> > > > > If I manually do the equality, as in this.id.equals(rhs.id), then it
> > > > > is true (because, well... 1 = 1 !)
> > > > > If I do an equality like this.id == rhs.id, then it is false (being a
> > > > > Java newbie... maybe it should be false, not sure if doing == instead
> > > > > of equals(obj) is correct with Longs)
> > > > >
> > > > > So I assume (am I wrong ?) that equalsBuilder's isEquals uses "=="
> > > > > instead of "equals(obj)"... but I really, really don't understand why.
> > > > >
> > > > > Can anyone enlighten me ?
> > > > >
> > > > > thanks !
> > > > > --
> > > > > <a href="http://in-pocket.blogspot.com";>http://in-pocket.blogspot.com
> > > > > - Mobile world, technology and more</a>
> > > > >
> > > > > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > >
> > > _________________________________________________________________
> > > Share life as it happens with the new Windows Live.
> > > http://www.windowslive.com/share.html?ocid=TXT_TAGHM_Wave2_sharelife_122007
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
> _________________________________________________________________
> The best games are on Xbox 360.  Click here for a special offer on an Xbox 
> 360 Console.
> http://www.xbox.com/en-US/hardware/wheretobuy/


-- 
<a href="http://in-pocket.blogspot.com";>http://in-pocket.blogspot.com
- Mobile world, technology and more</a>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to