Home » Java » Core Java » My favourite Java puzzler 2 + 1 = 4

About Daniel Shaya

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.

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.
(0 rating, 0 votes)
You need to be a registered member to rate this.
3 Comments Views Tweet it!
Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy

3
Leave a Reply

avatar
3 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
haripriyaJeshan BabooaJovaughn Recent comment authors

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

  Subscribe  
newest oldest most voted
Notify of
Jovaughn
Guest
Jovaughn

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

Jeshan Babooa
Guest

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
Guest
haripriya

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