A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在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范围内就赋过去么?
  1. public class Exec15 {
  2.         public static void main(String[] args) {
  3.                 String s = "join" + 3;
  4.                 System.out.println(s); //输出"join3"
  5.                 //int i = "a" + 3; //String不能赋给int
  6.                 //System.out.println(i);
  7.                 short a = 'a' + 5; //char转换成int再加常量优化(判断取值范围)
  8.                 System.out.println(a);
  9.                 float f = 5 + 5.5; //这是为啥?int转换成double,但还是常量啊,为什么常量优化没起作用,直接报错了?
  10.                 System.out.println(f);
  11.         }
  12. }
复制代码

3 个回复

正序浏览
楼主分享的看着很像是点招考试题~
回复 使用道具 举报
float f = 5 + 5.5;
5是int类型5.5是float类型的
在计算的时候他们都要提升为double类型
double比float的取值范围大所以要报错:可能会损失精度
所以要强转一下float = (float)(5+5.5)这样就不会了
回复 使用道具 举报
int->double
            ^
             |
          float

int转double
float转double

你想编译通过的话      double f=5+5.5才行
除非  float f=5f+5.5f

                        
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马