今天去百度搜索的时候,碰到一位发scjp考证问题的网友,进去看了一下。原来是考断言机制assert。但是令人费解的是,这位网友问的是Float.NaN是what,才想起,好像我也没见过呢。转了一圈csdn,高手还是很多的,大概知道了一点点关于NaN的知识,这里记录一下,毕竟这好像比较少用到,以后可能就google不了了,得提前准备一下。
(注意,double中的NaN类似)
在帮助文档中,NaN是这样解释的(double的,和float差不多):
<!-- Generated by javadoc (build 1.6.0-beta2) on Mon Mar 19 18:22:44 CST 2007 -->
<noscript></noscript>
public static final double NaN
保存 double
类型的 NaN 值的常量。它等于
Double.longBitsToDouble(0x7ff8000000000000L)
返回的值。
我是这样解释的(理解不深,有错请不吝赐教):
NaN--Not-a-Number,其实是指一个不合理的实数,在合法却不合理的情况下避免你的程序出现Exception。
NaN什么也不是,如果理解成一个超越了float范围的常量(或者double),那也是不对的,为什么?试试判断(NaN==NaN)吧,你会发现这返回了一个false。这在java底层是怎么做到的呢?最直接的方式是看java源代码咯。
/**
* A constant holding a Not-a-Number (NaN) value of type
* <code>float</code>. It is equivalent to the value returned by
* <code>Float.intBitsToFloat(0x7fc00000)</code>.
*/
public static final float NaN = 0.0f / 0.0f;
上面这一段,就是floa的NaN定义了。这并不是一个超出了范围的常量,而是java的Float中人为得制造出来的一个合法但是不合理的实数了(看来那位仁兄说得基本都对了)。所以,NaN==NaN永远等于false啦。
那用什么来判断是否合理的Number呢?很奇怪的是,java提供了一个isNaN()的方法,指是否是一个不合理的实数。是否很拗口?我在javascript中第一次接触这个东西,也觉得很奇怪。
为什么有这样一个判断的方法不把NaN设置成private的,却又对外开放?难道担心我们不能主动制造一个不合理的实数出来?本人菜鸟,如果有高手能解答,还请不吝赐教,理解未深,有错误请指出,谢谢。
分享到:
相关推荐
在Java编程语言中,我们经常需要处理数据统计和分析的问题,比如题目中提到的“男生女生各多少人”。这个问题可以通过创建数据结构存储信息,并利用循环和条件判断来解决。下面我们将详细探讨如何用Java实现这一功能...
在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,提升效率并实现并发操作。在这个“使用java多线程实现男孩和女孩一起去上课的动画”项目中,我们将探讨如何利用Java的线程机制来创建一个生动有趣...
在IT行业中,Java是一种广泛应用的高级编程语言,以其“一次编写,到处运行”的特性而闻名。这个名为"Java源码是男人就坚持30秒"的项目,显然是一款基于Java的游戏,挑战玩家在游戏中的持久力,正如标题所暗示的那样...
【标题】"是男人就撑60秒"是一款经典的休闲小游戏,它的Java源码解析将带我们深入理解游戏开发的基本原理和技术。在这个项目中,开发者使用Java编程语言实现了游戏的核心逻辑,让玩家在60秒内挑战自己的反应速度和...
`readme.txt`文件通常是提供关于项目的信息,包括如何运行、版权信息、开发者注释等。在这个游戏中,它可能解释了如何启动游戏(比如使用命令行运行JAR文件的命令),或者包含了一些开发过程中的注意事项。 总之,...
写给NET/JAVA男程序员的信 写给NET/JAVA男程序员的信 写给NET/JAVA男程序员的信
在Java编程领域,"是男人就坚持30秒"是一个基于GUI(图形用户界面)的小游戏,它利用了Java的多线程技术来实现游戏的动态运行。这个游戏的设计旨在挑战玩家的反应速度和耐力,目标是在30秒内尽可能地保持游戏状态,...
《是男人就下100层》是一款经典的Java游戏,基于WTK2.2和CLDC1.1平台开发,适合初级J2ME开发者学习。本文将深入解析这款游戏的源代码,带你了解J2ME游戏开发的基础知识。 一、J2ME简介 Java Micro Edition(J2ME)...
这个Java版本的游戏实现,将帮助我们深入理解Java编程语言的关键特性。 首先,我们要知道Java是一种面向对象的编程语言,它具有平台无关性、强大的内存管理以及丰富的类库等特点。在这个游戏中,我们需要创建多个类...
是男人就下100层Kjava版
### Java 中文姓氏排序详解 #### 一、引言 在处理中文数据时,我们经常需要对含有中文姓名的数据进行排序。Java 提供了多种方式进行排序,包括使用 `Collections.sort()` 方法配合自定义比较器(`Comparator`)。...
【Java小游戏:是男人就下一百层】 "是男人就下一百层"是一款经典的游戏,其挑战性在于玩家需要控制角色安全地通过一层又一层的障碍,直至达到目标层数。在Java编程环境下,我们可以利用Java语言的强大功能来实现...
基于JAVA的Android游戏源码,基于1.5的SDK写的,以前玩过的小游戏——是男人就下一百层源码下载,经典的安卓游戏源码,对学习Android游戏开发有帮助,用到动作类游戏的UI模型、重力感应、多媒体、网络通讯、存储、...
《是男人就下一百层》是一款经典的休闲游戏,它的Java版本是初学者学习移动平台游戏开发的一个良好起点。本文将深入探讨如何利用Java语言在手机上开发类似的游戏,以及涉及的相关技术点。 首先,Java是游戏开发中的...
Java虚拟机(JVM,Java Virtual Machine)是Java平台的核心组成部分,它负责执行Java程序,为Java代码提供了跨平台的运行环境。Java虚拟机的概念始于Sun Microsystems,现在由Oracle公司继续发展和维护。JVM的设计...
写的一个小游戏程序,由于没有美工合作,所以游戏画面完全是通过程序运算绘制的,不过也还人性化啦,希望朋友们能喜欢 本程序共分3个类 主类 角色类 和挡板类 源程序里已经包含相关说明 不过,实现的代码部分,我...
史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc 三大框架面试题.zip 技术面试题.zip Android笔试题库 C语言终极面试宝典.doc Java笔试题目汇总.pdf ...
java类,该类可以对一组数值进行由小到大排序。主类的main方法中,从键盘上输入一组数值,使用该类对其排序。
【JAVA-GUI学生管理系统】是一种基于Java图形用户界面(GUI)技术开发的系统,主要用于管理学生信息。在Java编程环境中,GUI(图形用户界面)允许开发者创建交互式的应用程序,使得用户可以通过直观的图形元素如按钮...
Java文本转语音(Text To Speech, 简称TTS)技术是一种将计算机中的文本转换成可听见的语音输出的功能。在Java中,我们可以利用Java Accessibility API或者Java Speech API(JSAPI)来实现这一功能。Java TTS系统...