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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Test011
{
        public static void main(String[] args)
        {       
       
                float a= 2.0f;
                float b =3.0f;
                float c =a + b;
                System.out.println(c);
        }
}

a和b都是float类型的,a+b相加时,a和b的类型不得强制转换为double吗?为什么a+b后赋值给c不报错呢?

12 个回复

倒序浏览

手头正好有本书学习一下
回复 使用道具 举报
本帖最后由 wangyu 于 2015-5-4 23:27 编辑

楼上说的差不多,但是注意 如果是低于int类型的,都会自动提升到int。高于int就是以两个变量高的为准做提升
回复 使用道具 举报
本帖最后由 l763631191 于 2015-5-4 23:26 编辑

所有的byte型、short型和char的值将被提升
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。所以a+b就是float类型的再运算。结果也就是float类型的



回复 使用道具 举报
a和b的类型不得强制转换为double
为啥呀?
回复 使用道具 举报
yihuihua 发表于 2015-5-4 23:27
a和b的类型不得强制转换为double
为啥呀?

还是没仔细看呀,有double类型的时候另一个才会强转,两个都是float
回复 使用道具 举报
float+float 结果如果不超出float范围就是float
超出范围还是float只是结果会成为负数那样的 除非你用double接收


以上为猜测...请自行验证.
回复 使用道具 举报
1017161726 来自手机 中级黑马 2015-5-4 23:38:52
8#
两个类型一样的。不用强转,如果有一个是double,就要墙砖
回复 使用道具 举报
tream 发表于 2015-5-4 23:18
手头正好有本书学习一下

非常感谢:victory:
回复 使用道具 举报
wangyu 发表于 2015-5-4 23:22
楼上说的差不多,但是注意 如果是低于int类型的,都会自动提升到int。高于int就是以两个变量高的为准做提升 ...

明白了  谢谢
回复 使用道具 举报
l763631191 发表于 2015-5-4 23:25
所有的byte型、short型和char的值将被提升
如果一个操作数是long型,计算结果就是long型;
如果一个操作数 ...

现在明白了谢谢
回复 使用道具 举报
1017161726 发表于 2015-5-4 23:38
两个类型一样的。不用强转,如果有一个是double,就要墙砖

低于int型的  不论两个类型一样不一样,都要转换成int 。谢谢了
回复 使用道具 举报
求楼主答案啊啊啊 啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马