易截截图软件、单文件、免安装、纯绿色、仅160KB

Java解惑2 28循环者

下面的谜题以及随后的五个谜题对你来说是扭转了局面,它们不是向你展示某些代码,然后询问你这些代码将做些什么,它们要让你去写代码,但是数量会很少。这些谜题被称为“循环者(looper)”。你眼前会展示出一个循环,它看起来应该很快就终止的,而你的任务就是写一个变量声明,在将它作用于该循环之上时,使得该循环无限循环下去。例如,考虑下面的for循环:
for (int i = start; i <= start + 1; i++) {}
看起来它好像应该只迭代两次,但是通过利用在谜题26中所展示的溢出行为,可以使它无限循环下去。下面的的声明就采用了这项技巧:
int start = Integer.MAX_VALUE - 1;
现在该轮到你了。什么样的声明能够让下面的循环变成一个无限循环?
While (i == i + 1) {}
仔细查看这个while循环,它真的好像应该立即终止。一个数字永远不会等于它自己加1,对吗?嗯,如果这个数字是无穷大的,又会怎样呢?Java强制要求使用IEEE 754浮点数算术运算[IEEE 754],它可以让你用一个double或float来表示无穷大。正如我们在学校里面学到的,无穷大加1还是无穷大。如果i在循环开始之前被初始化为无穷大,那么终止条件测试(i == i + 1)就会被计算为true,从而使循环永远都不会终止。
你可以用任何被计算为无穷大的浮点算术表达式来初始化i,例如:
double i = 1.0 / 0.0;
不过,你最好是能够利用标准类库为你提供的常量:
double i = Double.POSITIVE_INFINITY;
事实上,你不必将i初始化为无穷大以确保循环永远执行。任何足够大的浮点数都可以实现这一目的,例如:
double i = 1.0e40;
这样做之所以可以起作用,是因为一个浮点数值越大,它和其后继数值之间的间隔就越大。浮点数的这种分布是用固定数量的有效位来表示它们的必然结果。对一个足够大的浮点数加1不会改变它的值,因为1是不足以“填补它与其后继者之间的空隙”。
浮点数操作返回的是最接近其精确的数学结果的浮点数值。一旦毗邻的浮点数值之间的距离大于2,那么对其中的一个浮点数值加1将不会产生任何效果,因为其结果没有达到两个数值之间的一半。对于float类型,加1不会产生任何效果的最小级数是225,即33,554,432;而对于double类型,最小级数是254,大约是1.8 × 1016。
毗邻的浮点数值之间的距离被称为一个ulp,它是“最小单位(unit in the last place)”的首字母缩写词。在5.0版中,引入了Math.ulp方法来计算float或double数值的


相关文档:

Java的内存泄漏和垃圾回收机制

      JAVA会产生内存泄露吗?首先,答案是肯定的。Java虽然有垃圾回收器,但依然存在泄漏。
      Java内存泄漏跟C/C++内存泄漏的概念不一样:C/C++的内存泄漏是指Malloc了一些资源,最后没有free掉,内存没有回收,这个是真正意义上的内存黑洞;而Java的泄漏则 ......

Java第一天


正式开始Java了.
先是配置Java
java_home path classpath(1.5以上版本可以不用配置classpath了)
不过杯具的是.一开始理解错了.以为classpath的".;"--当前目录是指javac X:\aa.java的哪个X:目录..然后java aa就不用指定了..
弄了好久都不是这样的..还以为是win 7的原因..Orz
Java配置好了.该选文本编辑器了..
同学叫 ......

java中的基本数据类型


基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。它们是我们编程中使用最频繁的类型,因此面试题中也总少不了它们的身影,在这篇文章中我们将从面试中常考的几个方面来回顾一下与基本类型相关的知识。
基本类型共有八种,它们分别都有相对应的包装类。关于它们的详细信息请看下表:
基本类型可以分为三类, ......

Java解惑2 20我的类是什么I

下面的程序被设计用来打印它的类文件的名称。如果你不熟悉类字面常量,那么我告诉你Me.class.getName()将返回Me类完整的名称,即“com.javapuzzlers.Me”。那么,这个程序会打印出什么呢?
package com.javapuzzlers;
public class Me {
public static void main(String[] args){
System.out.pr ......

Java解惑3 26在循环中

下面的程序计算了一个循环的迭代次数,并且在该循环终止时将这个计数值打印了出来。那么,它打印的是什么呢?
public class InTheLoop {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 100;
public static void main(String[] args) {
int count = 0 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号