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 0 vote
Article Rating
(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
Subscribe
Notify of
guest
The comment form collects your name, email and content to allow us keep track of the comments placed on the website. Please read and accept our website Terms and Privacy Policy to post a comment.

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
5 years ago

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

Jeshan Babooa
4 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
2 years ago

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

3
0
Would love your thoughts, please comment.x
()
x