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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱东方 中级黑马   /  2012-7-6 22:00  /  1863 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 朱东方 于 2012-7-7 00:23 编辑

class  Demo
{
public static void main(String[] args)
{
  byte b1 = 3 , b2 = 4,b;
  b = b1 + b2;
  System.out.println(b);
  
}
}
编译出错了,说什么精度损失了。
b=b1+b2不就是b=3+4吗。
我记得byte的范围是-128~127,这样连个7都存不了吗。

捕获.GIF (2.62 KB, 下载次数: 25)

编译出错

编译出错

8 个回复

正序浏览
毕老师的视频里讲了
  1. class  Demo
  2. {
  3. public static void main(String[] args)
  4. {
  5.   byte b1 = 3 , b2 = 4,b;
  6.   b = b1 + b2; //b1,b2是变量,不能确定是什么值,可能超出byte的取值范围,而b正是byte型变量
  7.   System.out.println(b);
  8.   
  9. }
  10. }
复制代码
回复 使用道具 举报
朱东方 发表于 2012-7-6 22:39
b1,b2的值不是确定了吗。b1=3,b2=4

老师都不给分的 唉 哭死啊 呵呵 你QQ多少‘?我给你我的笔记 243327664我的

b= b1+b2
你虽然给他确定了 byte, b1=3 b2=4 但是在 你想加后得到的结果 b 他会自动提升类型 转成int哦
在java里面 系统默认的 只有boolean 和 int类型两种,所以会有损失精度的错误哦呵呵
回复 使用道具 举报
李志群 发表于 2012-7-6 22:26
class VarDemo3
{
        public static void main(String[] args)

b1,b2的值不是确定了吗。b1=3,b2=4
回复 使用道具 举报
b1和b2作为变量来说可以赋予任意值 也就是说它们相加的结果又可能超出byte的范围,这样是无法通过编译器检查的
所以要想不报错必须加强转b =(byte)(b1 + b2)
回复 使用道具 举报
这个毕老师讲过的 !!
回复 使用道具 举报
class VarDemo3
{
        public static void main(String[] args)
        {
                byte b1 = 3;
                byte b2 = 4;

                byte b;

                b=(byte)(b1+b2);//强制转换b1 和b2 运用的强制类型转换       
               

//b = b1+b2; (这个b1 b2不确定是不是在byte范围之内)
                //b = 3+4;(这个可以的话 证明 3和4 都在byte范围之内 所以就不会报错。)
                System.out.println("b="+b);
        }
}
回复 使用道具 举报
这是什么意思
回复 使用道具 举报
本帖最后由 邵阳 于 2012-7-6 22:14 编辑

class  Demo
{
public static void main(String[] args)
{
  byte b1 = 3 , b2 = 4,b;
  b = b1 + b2;             //这里b1+b2得到的结果被自动提升啦,因为java默认的是int类型,所以提升为了int类型。
  System.out.println(b);
  
}
}
//而此时b是byt类型,所以会报错。楼主可以修改代码,把int类型数据强制转化成byte类型。
class  Demo
{
public static void main(String[] args)
{
  byte b1 = 3 , b2 = 4,b;
  b = (byte)(b1 + b2);
  System.out.println(b);
  
}
}


评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

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