第十二题
设int x=1,float y=2,则表达式x/y的值是:()
A 0
B 1
C 2
D 以上都不是
懵逼树上懵逼果,懵逼树下你和我
首先看到这道题,我是懵逼和绝望的。
首先我们打开评论,看看谁的赞最多,拿过来
本题的意义在于两点,明白这两点之后题会不会本身就不重要了:
①float x = 1;与float x = 1.0f,这两种对于float类型的变量来说定义的方式都是正确的,也是比较常见的笔试题里面考察类型转换的例子,当第一种情况时,是将低精度int向上转型到float,是由于java的特性导致而不需要进行强制转换,而第二种情况则是比较正式的对于float变量的定义,由于这种类型本身在工作项目中并不常见,常用的带小数的数字我们一般都直接使用double类型,而double类型直接定义是没有问题的:double x = 1.0。而由于float的精度没有double类型高,因此必须对其进行显示的格式书写,如果没有这个f,就默认是double类型了。当然double x = 1.0d也是正确的命名,不信你可以尝试,虽然这是一个令人窒息的操作。
②当多个精度的数字同时进行运算时,最终结果以最高精度为准。在多数情况下,整数和小数的各级混合运算中,一般结果都是double类型的。但就本题而言,结果是float类型的,因为x,y两个数字精度最高的就是float,所以最终结果是0.5,并且这个0.5是float类型的。为什么说不是double类型呢,当然如果你这样处理:double m = x/y,当然m是double类型的,也不会报错,而如果你写成int m = x/y,编译器报错提示的时候就会让你转换成float或者进行强制转换成int,他是不会提示你转换成double的,尽管这么写并没有报错,原因就是①中所说的向上强转。float转换成double不需要任何提示。
具体自动转换如如下图所示。
实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。
x/y= (float)1.0/(float)2.0=0.5 (float类型的)
答案选D
本题目来自各大面试网站,如果不合理之处,欢迎吐槽
阅读目录(置顶)(长期更新计算机领域知识)
阅读目录(置顶)(长期更新计算机领域知识)
阅读目录(置顶)(长期科技领域知识)
歌谣带你看java面试题