文档章节

Java死循环的各种写法

城固如春
 城固如春
发布于 2017/02/21 19:44
字数 1066
阅读 83
收藏 0

1

请写一个变量声明,将它置于下面的循环之前,使得该循环成为无限循环。

for (int i =start; i <=start+1; i++){

}

这里,start是未定义变量,我们需要定义它。

如果你非常熟悉int的话,可能能得出正确答案:

答案:int start = Integer.MAX_VALUE - 1;

解释:因为int.MAX_VALUE + 1 = int.MIN_VALUE。

什么样的声明能让下面的循环是无限循环?

while(i == i + 1){

}

答案:double i = Double.MAX_VALUE;

解释:这样做是因为一个浮点数值越大,它和其后继数值之间的间隔就越大。浮点数的这种分布是用固定数量的有效位来表示它们的必然结果。对一个足够大的浮点数加 1 不会改变它的值,因为 1 是不足以“填补它与其后继者之间的空隙”。 

3

提供一个对i的声明,使下面的循环是无限循环。

while(i != i){

}

答案:double i = Double.NaN;

解释:IEEE 754 浮点算术保留了一个特殊的值用来表示一个不是数字的数量,这个值就是 NaN(“不是一个数字(Not a Number)”的缩写),对于所有没有良好的数字定义的浮点计算,例如 0.0/0.0,其值都是它。规范中描述道,NaN 不等于任何浮点数值,包括它自身在内。因此,如果 i 在循环开始之前被初始化为 NaN,那么终止条件测试(i != i)的计算结果就是 true,循环就永远不会终止。很奇怪但却是事实。  可以这样声明:double i = 0.0 / 0.0; 
     为了表达清晰,可以使用标准类库提供的常量: double i = Double.NaN;

4

提供一个对i的声明,使下面的循环是无限循环。

while(i != i + 0){

}

答案:String i = "";

解释: 注意:此题不使用浮点数。我 们必然可以得出这样的结论,即 i 的类型必须是非数值类型的,并且这其中存在着解谜方案。唯一的 + 操作符有定义的非数值类型就是 String。+ 操作符被重载了:对于 String 类型,它执行的不是加法而是字符串连接。如果在连接中的某个操作数具有非 String 的类型,那么这个操作书就会在连接之前转换成字符串。事实上,i 可以被初始化为任何值,只要它是 String 类型的即可,

例如:String i = "";

5

提供一个对i的声明,使下面的循环是无限循环。

while(i != 0){

  i >>>=1;

}

答案:byte i = -1;

6

提供对i和j的声明,使下面的循环是无限循环。

while(i <= j && j <=i && i !=j){

}

答案:Integer i = 100; 
          Integer j = new Integer(100);

解释:在 Java5.0版本及以后,<=操作符在原始数字类型集上是反对称的,但是<=操作符在被包装的数字类型(Byte、Character、 Short、Integer、Long、Float 和 Double)的操作数上不是反对称的,因为 Java 的判等操作符(==和!=)在作用于对象引用时,执行的是引用ID 的比较,而不是值的比较。

7

提供一个对i的声明,使下面的循环是无限循环。

while(i != 0 && i == -i){

}

答案:Integer i = Integer.MIN_VALUE;

解释:可 以推断出 i 的类型必然是整数型的。总共存在偶数个 int 数值——准确地说有2的32次方个——其中一个用来表示 0,这样就剩些奇数个 int 数值来表示正整数和负整数,这意味着正的和负的 int 数值的数量必然不相等。这暗示着至少有一个 int数值,其负值不能正确地表示成为一个 int 数值。 

     事实上,恰恰就有一个这样的 int 数值,它就是 Integer.MIN_VALUE,十六进制表示是 0x80000000。其符号位为 1,其余所有的位都是 0。如果我们对这个值取负值,那么我们将得到 0x7fffffff+1,也就是 0x80000000,即
Integer.MIN_VALUE!因此,Integer.MIN_VALUE 是它自己的负值,Long.MIN_VALUE 也是一样。对这两个值取负值将会产生溢出,但是 Java 在整数计算中忽略了溢出。

     因此可以这样声明:int i = Integer.MIN_VALUE; 或者:long i = Long.MIN_VALUE;

本文转载自:http://www.cnblogs.com/yunna/archive/2012/08/23/2652543.html

城固如春
粉丝 12
博文 187
码字总数 25379
作品 0
杭州
程序员
私信 提问
Java开发每日复盘2018_0515

今天跟大家分享几个Java小细节: 【1】「for each循环的写法」 【2】「常量 final 写法细节」 【3】「类型转换之String转其他」 下面我们来一个一个说: 【1】「for each循环的写法」 Java中:...

ZeroOSTalk
2018/05/16
0
0
1024这天,我故意写了个死循环~

导致CPU100%的原因很多,而程序中出现死循环就是原因之一。然而,并不是每个人在工作中都有机会踩中这个坑。我就是其中一个没踩过的。人生似乎有些不完整。 所以,我做了一个很重要的决定:在...

技术小能手
2018/10/24
0
0
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

一,java开发中: java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小、程序不严密,产生了过多的垃圾。 导致OutOfMemory...

今日竹石
2014/04/17
159
0
java类加载时初始化的疑问

java类在实例化之前要先加载类,加载类的时候会对类进行初始化,而如果类初始化的时候需要用到类的实例,这样不就成死循环了么,当然这种情况下java的实现中是不会出现死循环的,这是为什么呢...

gongweixin
2014/03/14
326
5
Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)

项目部署上线之后,线上项目是不能轻易修改的,定位问题的难度也会变大。因此监控是非常重要的一个环节,有了监控,我们才能更好的定位系统中的问题,从而排查。监控的工具有很多种, 但是j...

艾贺521
2018/07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部