循环之谜

本次专题是尽情创造死循环!

为了得到死循环,那么就要知道怎么创造永远都不为真的条件!

1、boolean值

while(true);

2、自增运算符

有没有可能一个值自增之后就小于它本身呢?

这是可能的?永远记住计算机中的整数类型是由范围的,有可能出现最大值+1然后退化成最小值了,

比如Integer.MAX_Value+1 = Integer.MIN_VALUE;想想是不是?

下面的循环也是合理的。

for(int i = Interger.MAX_VALUE - 1;  i <= Integer.MAX_VALUE;i++){


}

3、在java中,有多少种实数呢?有int,long,float,double,NaN,无穷大,无穷小,等

特殊浮点数:

Double.POSITIVE_INFINITY: 获得途径->1.0/0

Double.NEGATIVE_INFINITY: 获得途径->-1.0/0

NaN: 获得途径->0.0/0

注意整数除以0是非法的

那么好了,都知道,无穷大+1=无穷大

所以有了下面的程序也是符合要求的

double d = 1.0/0;

while(d==d+1){

}

4、NaN不等于任何浮点值,包括它本身

double d = 0.0/0.0

while(d != d)

5、自动包装和自动拆包

这个也能吗?

我们看一条规则:

当两个操作数都是被包装的数字类型时,数值比较操作符和判等操作符的行为存在着根本的差异,数值比较操作符执行的是值比较,而判等操作符执行的是引用标识的比较。当其中一个是包装类型,一个是基本类型,那么执行拆包。

也就说System.out.println(new Integer(0) == new Integer(0))输出的是false;System.out.println(new Integer(0) == 0)输出为true;

那么观察下面代码:

Integer i = new Integer(0);

Integer j = new Integer(0);

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

6、“+”在运算过程,不仅仅是加法,还能表示连接。

while(i != i + 0){}

如何定义可以使之成为死循环呢?

String i = "dsagas";

注意:一个东西加上0不一定等于本身。

7、声明i使得下面的循环是死循环

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

怎么可能?一个数不是0还能等于其负数?这样的数存在吗?

在数学上,不存在。但是在计算机界却是可能的。

我们都知道整型中,负数比正数多一个数,那么这个数是哪一个呢?是能表示的最小数。而除了0,其他的数都是正负对应的。

int i = Integer.MIN_VALUE;

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

8、这次不使用无穷大是否可以实现死循环呢?

int start = 2000000000;

float f=start;

while(f == (start + 50)){}

9、回头再看第七,然后运行下面的程序

import java.util.*;
public class Test{
public static void main(String[] args){
      short b = Short.MIN_VALUE;
      System.out.println(b == -b);
}
}

结果发现输出的是false

import java.util.*;
public class Test{
public static void main(String[] args){
       int b = Integer.MIN_VALUE;
       System.out.println(b == -b);
}
}

输出为true

怎么回事?

在第一道程序里,-b=32768,超出了short的表示范围,然后就提升成了int型。如果再输出语句中改成b==(short)(-b),就会输出true了

for(byte b = Byte.MIN_VALUE;b<Byte.MAX_VALUE;b++){

if(b == 0x90){

System.out.println("Joy");

}

}

那么考虑,会输出Joy吗?

在这里需要注意的是0x90是int常量,因此需要将b提升为int型在比较,而0x90表示144,显然就不会有相等的那一天。

下面的赋值语句

byte b = 0x80;

可以正常编译吗?

偷个懒,自行验证吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值