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]
