黑马程序员技术交流社区

标题: 关于类型转换的问题 [打印本页]

作者: houyudong    时间: 2014-5-19 21:48
标题: 关于类型转换的问题
System.out.println(0/0); //编译ok,运行错误
System.out.println(0/0.0);//NaN
System.out.println(1/0.0);//infinity
System.out.println(0.0/0);//NaN
System.out.println((0/0.0) == (0/0.0)); //false

数学曾经学过除数不能为零,而上面的语句却并没有报错,说明是正确的,他前面为double类型,所以后面的零也自动转换为double类型,问题来了:在一个语句中,到底是,还是?如果先进行类型转换在运算,编译时语法会编译通过?先运算后转换那么不是代表不同类型的数可以相互运算?搞不懂,求大神
作者: houyudong    时间: 2014-5-22 00:22
没有人给我解释这个问题呢??
作者: Sevenette    时间: 2014-5-22 20:32
第一句:ArithmeticException是RuntimeException 编译时不检查的
后面几句:
在JAVA中有三个特殊的浮点类型的数值:正无穷大、负无穷大、NaN。这三种数值用来表示出错或者溢出的情况。
比如:用一个正数去除0得到的是正无穷大(infinity),因为在浮点数运算中,不存在真正意义上的0,而是一个无限接近于0的浮点数。
NaN:是not a number,它不是一个数字,比较大小没意义Orz


作者: chenzhiyuan    时间: 2014-5-23 09:20
在java中,是可以运算的,如果int整形数据和一个实数运算,会先运算,,比如:int a=5;double   b=2.5;int c=int(a/b)=2.5,但是还需要你强制转换成int类.型的数据,因为右边运算结果是一个实数型的数据(实数是浮点数)而左边接收的是int,所以要准换,是输出语句里写一个数,默认是int的数据,,java中数据运算后,暗里会按最大的那个数据的类型转换,int long,结果是long类型的数据,左边是什么类型的,右边就把结果转换成什么类型的数据,
作者: chenzhiyuan    时间: 2014-5-23 09:21
b写错了,应该写b=2.0
作者: houyudong    时间: 2014-5-24 10:13
我是想知道,是先进行运算在转换,还是转换后在进行运算




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2