File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Beginning Java and the fly likes tricky java question Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCM Java EE 6 Enterprise Architect Exam Guide this week in the OCMJEA forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "tricky java question" Watch "tricky java question" New topic
Author

tricky java question

Seetharaman Venkatasamy
Ranch Hand

Joined: Jan 28, 2008
Posts: 5575

Hi All,

one of my friend asked this question .i am struggling


What makes the following code print false?
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19684
    
  20

I'll give you a hint. The type is either float or double, and you can find some information in java.lang.Float and java.lang.Double.


SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
James Tharakan
Ranch Hand

Joined: Aug 29, 2008
Posts: 580

Are you sure that it gives flase..??
I just run the program now... It give true


public class Simply
{
public static void main(String[] args)
{
float x = 2.0f;
System.out.println(x == x);
}
}


SCJP 6
Why to worry about things in which we dont have control, Why to worry about things in which we have control ! !
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14117
    
  16

You'll need to fill in something different than 2.0f for the value. See the API documentation of java.lang.Float, that might give you an idea...


Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 7 API documentation
Scala Notes - My blog about Scala
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38513
    
  23
As Rob has hinted, there is in fact a float value that would work for, but it's not 2.0f. There are more hints in the Java Language Specification, but the JLS is heavy reading.
Vijitha Kumara
Bartender

Joined: Mar 24, 2008
Posts: 3827

I got it



[ August 29, 2008: Message edited by: Vijitha Kumara ]

SCJP 5 | SCWCD 5
[How to ask questions] [Twitter]
Seetharaman Venkatasamy
Ranch Hand

Joined: Jan 28, 2008
Posts: 5575

Hi Vijitha Kumara ,

good. can you explain in details that why it is giving false?..

Vijitha Kumara
Bartender

Joined: Mar 24, 2008
Posts: 3827

JLS says:
A NaN value is used to represent the result of certain invalid operations such as dividing zero by zero.


May be It's the way java allocate the variable (with the NaN constant). May be Someone has a better idea(actual reason) Campbell/Rob Prime/Jesper?

[ August 29, 2008: Message edited by: Vijitha Kumara ]
[ August 29, 2008: Message edited by: Vijitha Kumara ]
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38513
    
  23
Go to the Java Language Specification link I provided earlier and look for �4.2.3 and �4.2.4.

You can get NaN from various operations; 0f / 0f or Math.sqrt(-1) will both give Nan. In the case of the sqrt method (which is actually written in C or C++) there is something in it which in Java would be like this:That acts as a guard against trying to calculate the square root of 0 (which is 0) or of a negative number which is not-a-number.

In the Float API documentation it says that NaN is not ordered; that becomes obvious when we try some arithmetic.

2 * 0 = 0
3 * 0 = 0
∴ 2 * 0 = 3 * 0
Multiply both sides by 0 / 0, which is Nan; that gets rid of the zeroes
∴ 2 = 3

The only way you can get out of this nonsense result is saying that NaN is not equal to itself.
Seetharaman Venkatasamy
Ranch Hand

Joined: Jan 28, 2008
Posts: 5575

Originally posted by Campbell Ritchie:
2 = 3

The only way you can get out of this nonsense result is saying that NaN is not equal to itself.



Thanks Cambpell and vijitha

Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38513
    
  23
You're welcome
 
wood burning stoves
 
subject: tricky java question