This week's book giveaway is in the Android forum.We're giving away four copies of Head First Android and have Dawn & David Griffiths on-line!See this thread for details.
Big Moose Saloon
 Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies Register / Login Win a copy of Head First Android this week in the Android forum!

# (Solved!) Boxing tricks

Greenhorn

Joined: Oct 24, 2007
Posts: 5
Hey.

Well, checking all chapters before the friday's exam made me encounter this tricky thing about boxing.

Byte b = 127;
Byte b1 = 127;
b == b1; // this is true

Integer i = 128;
Integer i1 = 128;
i == i1; // this is false, because it's larger than 127. Ok, that's burnt in.

Now. Ha! Look:
Short s = 10;
Short s2 = new Short((short)10);
s == s2; // this is false. Eeek.
s.equals(s2); // this is true >_<

Short s3 = new Short("10");
s2 == s3; // false too. Surprised.

Well, is there any logic explanation to this, or it's just to be accepted as-is and remember it until the exam is done?

thanks.

[ October 24, 2007: Message edited by: Jem Hobstad ]
[ October 24, 2007: Message edited by: Jem Hobstad ]

Keith Lynn
Ranch Hand

Joined: Feb 07, 2005
Posts: 2367
Hey.

Well, checking all chapters before the friday's exam made me encounter this tricky thing about boxing.

Byte b = 127;
Byte b1 = 127;
b == b1; // this is true

Integer i = 128;
Integer i1 = 128;
i == i1; // this is false, because it's larger than 127. Ok, that's burnt in.

Now. Ha! Look:
Short s = 10;
Short s2 = new Short((short)10);
s == s2; // this is false. Eeek.
s.equals(s2); // this is true >_<

Short s3 = new Short("10");
s2 == s3; // false too. Surprised.

Well, is there any logic explanation to this, or it's just to be accepted as-is and remember it until the exam is done?

thanks.

[ October 24, 2007: Message edited by: Jem Hobstad ]

Yes, there is a logical explanation.

When used between object references, == tests whether or not those references refer to the same object.

The equals method tests the contents of the object.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

...this is false, because it's larger than 127. Ok, that's burnt in...

Remember, this behavior of referencing the same wrapper instance for values withing a byte range applies only to boxed instances. Whenever you use "new" to construct a wrapper instance, you are creating a brand new separate instance, regardless of the value.

"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
sscce.org
Greenhorn

Joined: Oct 24, 2007
Posts: 5
Ok, but my point is

They hold the same value. They all are instances of Byte, but strangely, only two references point to the same object.
In the book, it states (p236) taht two wrapper objects will always be == when their primitive values are the same:
- Boolean
- Byte
- (..)
- Short and Integer from -128 to 127.
According to that, the == betweeb any of these four Byte instances should return true ...
Greenhorn

Joined: Oct 24, 2007
Posts: 5
ah sorry didn't see your post Marc

ok that solves my issue then!
cheers.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343