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

© 熊永标 中级黑马   /  2013-1-7 12:57  /  1689 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. byte a=10;
  2. byte b=10;
  3. byte c=a+b;
  4. //编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给byte类型,会发生字节丢失.所以编译不通过.
  5. short a=10;
  6. short b=10;
  7. short c=a+b;
  8. //编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给short类型,会发生字节丢失.所以编译不通过.
  9. char a=10;
  10. char b=10;
  11. char c=a+b;
  12. /*编译会出错,因为a+b的结果将类型默认为int类型,把int类型赋给char类型,会发生字节丢失.所以编译不通过.*/

  13. int a=10;
  14. int b=10;
  15. int c=a+b;
  16. /*编译会通过,因为a+b的结果将类型默认为int类型,把int类型赋给int类型,因为类型相同.所以编译通过.这我理解.但是如下:*/

  17. float f=30.2f;
  18. float f1=30.2f;
  19. float f2=f+f1;
  20. /*也会编译通过,不是说浮点数默为Double吗,那f+f1结果当在内存中时,也是Double,那在赋值给float时,为什么会通过编译呢?*/
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
java中常量 的浮点数字就被认为是double型的,而且不能直接赋给float型的变量。。像float a=1.2; 这样的编绎直接出错。。要写成float a=1.2f; 才行。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
你好
这是java自动类型提升,byte、short、char在算数运算时会自动类型提升为int。
所以得到的结果需要强制类型转换。

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
所谓的默认是double行 是你没写才是那样的啊
但你看你写的是
float f=30.2f;    你每行后面都有f啊  这就是在告诉虚拟机这个是一个float类型的  然后你两个float只要不超出范围 那他们相加就是float类型的
float f1=30.2f;
float f2=f+f1;   两个float类型相加赋值给float没问题哦

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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