黑马程序员技术交流社区

标题: 基本数据类引引发的问题迷惑 [打印本页]

作者: 熊永标    时间: 2013-1-7 12:57
标题: 基本数据类引引发的问题迷惑
  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时,为什么会通过编译呢?*/
复制代码

作者: 王少雷    时间: 2013-1-7 13:10
java中常量 的浮点数字就被认为是double型的,而且不能直接赋给float型的变量。。像float a=1.2; 这样的编绎直接出错。。要写成float a=1.2f; 才行。
作者: 何竹冬    时间: 2013-1-7 13:55
你好
这是java自动类型提升,byte、short、char在算数运算时会自动类型提升为int。
所以得到的结果需要强制类型转换。
作者: 张森    时间: 2013-1-7 17:57
所谓的默认是double行 是你没写才是那样的啊
但你看你写的是
float f=30.2f;    你每行后面都有f啊  这就是在告诉虚拟机这个是一个float类型的  然后你两个float只要不超出范围 那他们相加就是float类型的
float f1=30.2f;
float f2=f+f1;   两个float类型相加赋值给float没问题哦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2