File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Why This Code Shows Error...

 
Thangaraj Selvamani
Ranch Hand
Posts: 61
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Why This Code Shows Error...

C:\SCJP>java -version
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
 
Steven Landers
Ranch Hand
Posts: 30
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
== and != can only be used with the Integer wrapper when the number is between -127 and 127. Otherwise, the == and != will answer the question "are the references pointing to the same object?" correctly as "false"

This is from K&B's SCJP 6.0 book - I'd highly recommend purchasing it -

...page 246...
In order to save memory, two instances of the
following wrapper objects (created through boxing), will always be == when their
primitive values are the same:
■ Boolean
■ Byte
■ Character from \u0000 to \u007f (7f is 127 in decimal)
■ Short and Integer from -128 to 127
Note: When == is used to compare a primitive to a wrapper, the wrapper will be
unwrapped and the comparison will be primitive to primitive.
....
[ November 10, 2008: Message edited by: Steven Landers ]
 
Ankit Garg
Sheriff
Posts: 9497
22
Android Google Web Toolkit Hibernate IntelliJ IDE Java Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Well Thangaraj is that code giving ERROR or the output is not what you expected. It runs fine on my PC. The output has been explained by Steven...
 
Maleen Abeydeera
Greenhorn
Posts: 20
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
as an extension to this problem, is there an Integer pool like a Srting pool?

I mean, when I say

Integer i = 23;
Integer j =23;
System.out.println(i==j);

it prints "true" , but

Integer i = 23;
Integer j =new Integer(23);
System.out.println(i==j);

prints "false"

can somebody explain why?
 
joseph gonzales
Greenhorn
Posts: 6
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Maleen,

for my understanding i==j does not actually comparing their values but instead it compares the address of where the value 23 was stored in the memory.

sample 1:
Integer i = 23; // reference i points to the address where 23 was stored
Integer j =23; // since 23 already exist in the memory, make reference j point to that same address in memory.

thats why (i==j) equals to true because i and j points to the same address


sample 2:
Integer i = 23; // reference i points the the address where 23 was stored
Integer j =new Integer(23);// this time a new Object was created and stored in different address in memory, then make reference j points to that address

so i==j will result to false.

so to get the result as expected you can use the .equals method.
[ November 10, 2008: Message edited by: joseph gonzales ]
 
Rekha Srinath
Ranch Hand
Posts: 178
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Maleen & Joseph,

The answer to your questions is there in Steven's post...

In order to save memory, two instances of the
following wrapper objects (created through boxing), will always be == when their
primitive values are the same:
.........
.........
Short and Integer from -128 to 127


So, in case of
Integer i1 = 127;
Integer i2 = 127;
These are Integer variables created through boxing (ie. without using new operator)...So, as per the rule given above, an == operation on i1 and i2 will be true..

If you change the value of i1 and i2 to 128 or greater, == will return false
[ November 10, 2008: Message edited by: Rekha Srinath ]
 
Maleen Abeydeera
Greenhorn
Posts: 20
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks, Joseph and Rekha.

So my understanding is that like the String pool, an Integer pool also exists, and behaves exactly like the String pool. Am I correct?
 
Rekha Srinath
Ranch Hand
Posts: 178
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I don't think you can call it an Integer pool... And I don't know if something like that exists...

Also, note that this specific == rule for Integer created through boxing is valid only for integer values till 127 (and other data types, which Joseph had quoted from K&B). But, in case of String literals, there is no such bound.
 
I agree. Here's the link: http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic