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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范建海 中级黑马   /  2015-1-18 01:18  /  1909 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test
{
        public static void main(String [] args)
        {
                byte a = 3;
                a += 5;   // 这种写法能够通过
                //a = a+5;        // 这种写法报错
                System.out.println(a);
        }
}
谁能解释这是为什么,悬赏10个马币

评分

参与人数 1黑马币 +6 收起 理由
java小兵 + 6 我是晓鹏

查看全部评分

17 个回复

正序浏览
新手来涨姿势
回复 使用道具 举报
byte,short,char一般会自动提升为int,所以容易出现类型不匹配,需强转
回复 使用道具 举报
不管是哪种语言都没有你列举的下面的哪一种加法,都只有上面的一种,例如C语言,C++,java等
回复 使用道具 举报
这里涉及到 类型转换的问题,系统默认的是int类型,大于byte,a+=5,是默认有自动的隐藏性的转换,而,a=a+5,则是因为,a,会自动提升为int,运算之后是int型,而你定义的a是byte,这样会报损失精度的问题。
回复 使用道具 举报

哦   我昨晚太累了   少了一个后面的括号   不好意思啊
回复 使用道具 举报
一步和两部的区别,+=是一步完成的
回复 使用道具 举报
楼上说的都很好,a是byte型,5是int型,需要强制转换才能赋值,a+=5这么写的话会自动强制装换的,所以不会错
回复 使用道具 举报
+=是一元运算符会自动转换类型;而+是二元运算符,类型不同,需要强制转换
回复 使用道具 举报
这个是因为类型的不用,一个int类型,一个byte类型!需要转换!毕老师的课里面讲过!
回复 使用道具 举报
寻觅 发表于 2015-1-18 01:40
二楼前面的说的对,不过后面说的不对,报错的那一行应该写成:a = (byte)(a+5);这样才叫强制类型转换,你试 ...

你说的是,应该是这样的
回复 使用道具 举报
陈旭刚520 发表于 2015-1-18 01:32
因为你定义的是byte类型的变量,a+=5是系统自动强制转换,而a=a+5是把int类型的数赋值给byte类型,必须强制 ...

有错呀,大哥
回复 使用道具 举报
楼上说的已经很好了,类型转换的细节
回复 使用道具 举报
类型转换的问题
回复 使用道具 举报
+=有有个先自动强转,然后再+的功能,所以没错。
回复 使用道具 举报
继续看毕老师视频,有详细讲解,视频多看几遍就知道为啥了
回复 使用道具 举报
二楼前面的说的对,不过后面说的不对,报错的那一行应该写成:a = (byte)(a+5);这样才叫强制类型转换,你试试就知道了!
回复 使用道具 举报
因为你定义的是byte类型的变量,a+=5是系统自动强制转换,而a=a+5是把int类型的数赋值给byte类型,必须强制转换,所以会报错,应写   a = (byte)a+5;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马