黑马程序员技术交流社区

标题: 有关数据类型转换,请高手指点 [打印本页]

作者: 崔一恒    时间: 2013-9-6 17:17
标题: 有关数据类型转换,请高手指点
本帖最后由 杨增坤 于 2013-9-11 17:43 编辑
  1. class Demo1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a=3;
  6. byte b=4;
  7.                 a=a+b;
  8.                 System.out.println(a);
  9.         }
复制代码
  1. class Demo2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a=3;
  6. byte b=4;
  7.                 b=a+b;
  8.                 System.out.println(b);
复制代码
  1. class Demo3
  2. {
  3.         public static void main(String[] args)
  4.         {
  5. byte a=3,b=4,c;
  6.                 c=a+b;
  7.                 System.out.println(c);
  8.         }
复制代码
对Demo2编译时提士“b=b+a"可能损失精度;对Demo3编译时提士”c=a+b“QvodPlayer;而为什么偏偏对Demo1编译没有问题;这三个有什么区别么?请高手帮忙分析为什么Demo1里的a=a+b (a和b也是不同类型的数据)编译后没有出现提示可能损失精度呢?
作者: 李锡碧    时间: 2013-9-6 17:21
当一个算术表达式中包含多个基本数据类型的值时,整个算术表达式的数据类型将会自动提升,java定义如下提升规则:
A.        所有byte类型、short类型、char类型将被提升到int型。
B.        整个算术表达式的数据类型自动提升到与表达式最高等级操作数同样的类型。

作者: 毋须繁华    时间: 2013-9-6 17:25
  1. <p>当参与算术运算的两个操作数类型不同时,低类型转换为高类型。
  2. 当运算过程中有变量参与时,运算结果类型不足int升为int
  3. 高类型与低类型
  4. byte
  5. short</p><p>char
  6. int
  7. long
  8. float                                       float与double类型转换成整型
  9. double                                      时只取整数部分
  10. </p>
复制代码
7种基本数据类型间,从上至下,自动转换。从下往上必须强制转换
作者: 毋须繁华    时间: 2013-9-6 17:28

这7种数据类型在内存中占用的大小不同,所以会出现放不下的问题

作者: 辛春鹏    时间: 2013-9-6 18:08
Demo1a=a+b;只有这个表达式中是将二进制位低的向上提升。向上提升的话,就是本来byte是8个二进制位的,提升为int就是32位的。不会损失精度。而且,如果我没有记错的话,表达式在运算的时候会将数据装车int型运算。所以,在demo2中,即使是2个byte型的数据在运算。但是,运算的结果也是int型的。所以,int型赋值给byte型的c也是在损失精度。
作者: 杨增坤    时间: 2013-9-6 18:09
楼主你好!如果您的问题已经解决了,

请您把问题的未解决更改为已解决

谢谢合作!







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