`
zranye
  • 浏览: 26502 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于JAVA的NaN

    博客分类:
  • JAVA
阅读更多

      今天去百度搜索的时候,碰到一位发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编程中,多线程是一项关键特性,它允许程序同时执行多个任务,提升效率并实现并发操作。在这个“使用java多线程实现男孩和女孩一起去上课的动画”项目中,我们将探讨如何利用Java的线程机制来创建一个生动有趣...

    Java源码是男人就坚持30秒

    在IT行业中,Java是一种广泛应用的高级编程语言,以其“一次编写,到处运行”的特性而闻名。这个名为"Java源码是男人就坚持30秒"的项目,显然是一款基于Java的游戏,挑战玩家在游戏中的持久力,正如标题所暗示的那样...

    是男人就撑60秒java源码

    【标题】"是男人就撑60秒"是一款经典的休闲小游戏,它的Java源码解析将带我们深入理解游戏开发的基本原理和技术。在这个项目中,开发者使用Java编程语言实现了游戏的核心逻辑,让玩家在60秒内挑战自己的反应速度和...

    java swing游戏《是男人就下一百层源码》

    `readme.txt`文件通常是提供关于项目的信息,包括如何运行、版权信息、开发者注释等。在这个游戏中,它可能解释了如何启动游戏(比如使用命令行运行JAR文件的命令),或者包含了一些开发过程中的注意事项。 总之,...

    写给NET/JAVA男程序员的信

    写给NET/JAVA男程序员的信 写给NET/JAVA男程序员的信 写给NET/JAVA男程序员的信

    java 是男人就坚持30秒

    在Java编程领域,"是男人就坚持30秒"是一个基于GUI(图形用户界面)的小游戏,它利用了Java的多线程技术来实现游戏的动态运行。这个游戏的设计旨在挑战玩家的反应速度和耐力,目标是在30秒内尽可能地保持游戏状态,...

    是男人就下100层(java源代码)

    《是男人就下100层》是一款经典的Java游戏,基于WTK2.2和CLDC1.1平台开发,适合初级J2ME开发者学习。本文将深入解析这款游戏的源代码,带你了解J2ME游戏开发的基础知识。 一、J2ME简介 Java Micro Edition(J2ME)...

    java版是男人就下100层

    这个Java版本的游戏实现,将帮助我们深入理解Java编程语言的关键特性。 首先,我们要知道Java是一种面向对象的编程语言,它具有平台无关性、强大的内存管理以及丰富的类库等特点。在这个游戏中,我们需要创建多个类...

    是男人就下100层Kjava版

    是男人就下100层Kjava版

    java 中文姓氏 排序

    ### Java 中文姓氏排序详解 #### 一、引言 在处理中文数据时,我们经常需要对含有中文姓名的数据进行排序。Java 提供了多种方式进行排序,包括使用 `Collections.sort()` 方法配合自定义比较器(`Comparator`)。...

    Java 小游戏 是男人就下一百层

    【Java小游戏:是男人就下一百层】 "是男人就下一百层"是一款经典的游戏,其挑战性在于玩家需要控制角色安全地通过一层又一层的障碍,直至达到目标层数。在Java编程环境下,我们可以利用Java语言的强大功能来实现...

    Android是男人就下一百层Java源码

    基于JAVA的Android游戏源码,基于1.5的SDK写的,以前玩过的小游戏——是男人就下一百层源码下载,经典的安卓游戏源码,对学习Android游戏开发有帮助,用到动作类游戏的UI模型、重力感应、多媒体、网络通讯、存储、...

    是男人就下一百层SHY.rar_java 手机_java初学者_手机 游戏_游戏 java

    《是男人就下一百层》是一款经典的休闲游戏,它的Java版本是初学者学习移动平台游戏开发的一个良好起点。本文将深入探讨如何利用Java语言在手机上开发类似的游戏,以及涉及的相关技术点。 首先,Java是游戏开发中的...

    java虚拟机

    Java虚拟机(JVM,Java Virtual Machine)是Java平台的核心组成部分,它负责执行Java程序,为Java代码提供了跨平台的运行环境。Java虚拟机的概念始于Sun Microsystems,现在由Oracle公司继续发展和维护。JVM的设计...

    JAVA版 是男人就下100层

    写的一个小游戏程序,由于没有美工合作,所以游戏画面完全是通过程序运算绘制的,不过也还人性化啦,希望朋友们能喜欢 本程序共分3个类 主类 角色类 和挡板类 源程序里已经包含相关说明 不过,实现的代码部分,我...

    android和java面试大全集

    史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc 三大框架面试题.zip 技术面试题.zip Android笔试题库 C语言终极面试宝典.doc Java笔试题目汇总.pdf ...

    java编写类进行排序

    java类,该类可以对一组数值进行由小到大排序。主类的main方法中,从键盘上输入一组数值,使用该类对其排序。

    JAVA-GUI学生管理系统

    【JAVA-GUI学生管理系统】是一种基于Java图形用户界面(GUI)技术开发的系统,主要用于管理学生信息。在Java编程环境中,GUI(图形用户界面)允许开发者创建交互式的应用程序,使得用户可以通过直观的图形元素如按钮...

    java语音朗读实例。TTS调用实例

    Java文本转语音(Text To Speech, 简称TTS)技术是一种将计算机中的文本转换成可听见的语音输出的功能。在Java中,我们可以利用Java Accessibility API或者Java Speech API(JSAPI)来实现这一功能。Java TTS系统...

Global site tag (gtag.js) - Google Analytics