Core Java

My favourite Java puzzler 2 + 1 = 4

Here’s  my current favourite Java puzzler. 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.

Reference: My favourite Java puzzler 2 + 1 = 4 from our JCG partner Daniel Shaya at the Rational Java blog.

Daniel Shaya

Daniel has been programming in Java since it was in beta. Working predominantly in the finance industry he has created real time trading and margin risk applications. He is currently a director at OpenHFT where we are building next generation Java low latency products.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Jovaughn
Jovaughn
9 years ago

This would of been really interesting if it was primitive values that were used.

Jeshan Babooa
8 years ago

Daniel, that was quite… puzzling :)

Have you read the Java Puzzlers book? There are many brain teasers in it. For example can you make this code become an infinite loop:

while (i == i + 1) {

}

Quite puzzling, huh? :)

If you’d like the answer and a few more puzzlers, I invite you to read more here: http://methodicalprogrammer.com/blog/5-puzzles-that-prove-you-need-to-read-java-puzzlers

haripriya
haripriya
6 years ago

in my case output was 3 only. i am using jdk 904

Back to top button