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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔一恒 中级黑马   /  2013-9-6 17:17  /  1152 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 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也是不同类型的数据)编译后没有出现提示可能损失精度呢?

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

5 个回复

倒序浏览
当一个算术表达式中包含多个基本数据类型的值时,整个算术表达式的数据类型将会自动提升,java定义如下提升规则:
A.        所有byte类型、short类型、char类型将被提升到int型。
B.        整个算术表达式的数据类型自动提升到与表达式最高等级操作数同样的类型。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
  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种基本数据类型间,从上至下,自动转换。从下往上必须强制转换

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报

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

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
Demo1a=a+b;只有这个表达式中是将二进制位低的向上提升。向上提升的话,就是本来byte是8个二进制位的,提升为int就是32位的。不会损失精度。而且,如果我没有记错的话,表达式在运算的时候会将数据装车int型运算。所以,在demo2中,即使是2个byte型的数据在运算。但是,运算的结果也是int型的。所以,int型赋值给byte型的c也是在损失精度。
回复 使用道具 举报
楼主你好!如果您的问题已经解决了,

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

谢谢合作!


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