How can you get your code to do this?
Integer b = 2; Integer c = 1; System.out.println("b+c : " + (b+c) ); // output: 'b+c : 4' !!
There are no tricks with Sytem.out.println() i.e. you would be able to see the same value in a debugger.
Clue: You need to add a few lines of code somewhere before this in your program.
Scroll down for the solution.
.
.
.
.
.
.
.
.
.
.
.
public static void main(String... args)throws Exception{ Integer a = 2; Field valField = a.getClass().getDeclaredField("value"); valField.setAccessible(true); valField.setInt(a, 3); Integer b = 2; Integer c = 1; System.out.println("b+c : " + (b+c) ); // b+c : 4 }As you can see (and I would encourage you to go to the source code for Integer) there is a static cache (look for the Inner class IntegerCache) where the value of the Integer is mapped to its corresponding int value. The cache will store all numbers from -128 to 127 although you can tune this using the property java.lang.Integer.IntegerCache.high.
No comments:
Post a Comment