Today, while solving puzzles from Java Puzzler book I myself created a new Java Puzzle. So, in this blog I am writing about that puzzle.

Puzzle

Will the code given below results in an infinite loop.

public class MyJavaPuzzle {
public static void main(String[] args) {
Double i = Double.NaN;
while(i != i){
System.out.println("Infinite Loop");
}
}
}

Solve this puzzle and have fun. Happy Puzzling!!!

Post your answer and explanation in comments.

### Like this:

Like Loading...

Stefan ZobelI think it won’t

Shantanu KumarWhen i is defined as “Double i”, you are comparing object references hence the loop doesn’t execute. When you define i as “double i” you have a primitive type that is taken care of by the runtime and hence the loop executes.

Did I answer that correctly?

JohnGood question. Perhaps something with autoboxing double as a Double, though it must be something Java version, arch or OS specific, as running it on Java 6 64bit on OSX, it does not result in an infinite loop.

Pingback: Tweets that mention New Java Puzzler Found while reading Java Puzzler book « A daily technical diary -- Topsy.com

benNaN in floating point can’t equal NaN, similar to infinity in conventiinal math. So ideally it wouldnt match. However its been boxed so its now a reference check and will not loop.

Neeraj YadavIts not new its known Gotcha in Java.

its about Incomparable NaN..

When you divide by zero with double, take the square root of a negative number, overflow the maximum representable value etc. the result is a magic number called Double.NaN, Double.POSITIVE_INFINITY or Double.NEGATIVE_INFINITY.

ideally you should be using

while ( Double.isNaN( d ) )

The theory is making NaN not equal to itself allows a quick and dirty way to test for a calculation going haywire.

Well, if you change

“Double i” to primitive type “double i” it will start working and enter the infinite loop

Long ago read at

http://mindprod.com/jgloss/gotchas.html

Hope this helps

Cheers:)

Crispin ArmstrongIts not new its known Gotcha in Java.its about Incomparable NaN..When you divide by zero with double, take the square root of a negative number, overflow the maximum representable value etc. the result is a magic number called Double.NaN, Double.POSITIVE_INFINITY or Double.NEGATIVE_INFINITY.ideally you should be usingwhile ( Double.isNaN( d ) )The theory is making NaN not equal to itself allows a quick and dirty way to test for a calculation going haywire.Well, if you change“Double i” to primitive type “double i” it will start working and enter the infinite loop+1

Vadim BereznikerI don’t know if I’d call it a new puzzle.

I remember there’s already puzzle in the book about comparing references instead of values.

whyjavaPost authorIt is an new java puzzler. I have confirmed it with Joshua Bloch http://twitter.com/joshbloch/status/14787228197

学士It’s so simple!

Just test this,you will konw why!

Code:

Double i = Double.NaN;

int v =1;

while(i.equals(i)){

System.out.println(“Infinite Loop”);

if(++v == 5){

break;

}

}

Pingback: Stefan zobel | Momanimusic

Anbu PrakashHere nothing is special while (i!=i) will always fail…..