黑马程序员技术交流社区
标题:
float f = 5 + 5.5这句话为什么通不过编译?
[打印本页]
作者:
li3N
时间:
2015-11-11 19:57
标题:
float f = 5 + 5.5这句话为什么通不过编译?
在Java中,下列语句不能通过编译的有( )
A、String s= “join”+ 3;
B、int i= “a”+3;
C、short a = ‘a’+5;
D、float f = 5+5.5;
A没问题,字符串和其他任意基本数据类型连接,结果都是字符串
B通不过,不能把String赋给int
C没问题,char转成int,再加常量优化(判断取值范围),结果在short内就赋过去
D为什么通不过?难道不是int转成double,再加常量优化,结果在float范围内就赋过去么?
public class Exec15 {
public static void main(String[] args) {
String s = "join" + 3;
System.out.println(s); //输出"join3"
//int i = "a" + 3; //String不能赋给int
//System.out.println(i);
short a = 'a' + 5; //char转换成int再加常量优化(判断取值范围)
System.out.println(a);
float f = 5 + 5.5; //这是为啥?int转换成double,但还是常量啊,为什么常量优化没起作用,直接报错了?
System.out.println(f);
}
}
复制代码
作者:
mandoooo
时间:
2015-11-11 20:58
int->double
^
|
float
int转double
float转double
你想编译通过的话 double f=5+5.5才行
除非 float f=5f+5.5f
作者:
一个人走天下
时间:
2015-11-11 22:07
float f = 5 + 5.5;
5是int类型5.5是float类型的
在计算的时候他们都要提升为double类型
double比float的取值范围大所以要报错:可能会损失精度
所以要强转一下float = (float)(5+5.5)这样就不会了
作者:
唐彬
时间:
2015-11-12 00:07
楼主分享的看着很像是点招考试题~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2