黑马程序员技术交流社区

标题: 大神们难题求指教 [打印本页]

作者: 范建海    时间: 2015-1-18 01:18
标题: 大神们难题求指教
class Test
{
        public static void main(String [] args)
        {
                byte a = 3;
                a += 5;   // 这种写法能够通过
                //a = a+5;        // 这种写法报错
                System.out.println(a);
        }
}
谁能解释这是为什么,悬赏10个马币
作者: 陈旭刚520    时间: 2015-1-18 01:32
因为你定义的是byte类型的变量,a+=5是系统自动强制转换,而a=a+5是把int类型的数赋值给byte类型,必须强制转换,所以会报错,应写   a = (byte)a+5;
作者: 寻觅    时间: 2015-1-18 01:40
二楼前面的说的对,不过后面说的不对,报错的那一行应该写成:a = (byte)(a+5);这样才叫强制类型转换,你试试就知道了!
作者: 包子楚    时间: 2015-1-18 03:28
继续看毕老师视频,有详细讲解,视频多看几遍就知道为啥了
作者: 菜鸟一号    时间: 2015-1-18 08:51
+=有有个先自动强转,然后再+的功能,所以没错。
作者: 以利亚    时间: 2015-1-18 09:35
类型转换的问题
作者: xiao4236    时间: 2015-1-18 09:44
楼上说的已经很好了,类型转换的细节
作者: 范建海    时间: 2015-1-18 10:40
陈旭刚520 发表于 2015-1-18 01:32
因为你定义的是byte类型的变量,a+=5是系统自动强制转换,而a=a+5是把int类型的数赋值给byte类型,必须强制 ...

有错呀,大哥
作者: 范建海    时间: 2015-1-18 10:42
寻觅 发表于 2015-1-18 01:40
二楼前面的说的对,不过后面说的不对,报错的那一行应该写成:a = (byte)(a+5);这样才叫强制类型转换,你试 ...

你说的是,应该是这样的
作者: 老外    时间: 2015-1-18 11:57
这个是因为类型的不用,一个int类型,一个byte类型!需要转换!毕老师的课里面讲过!
作者: 自信流云    时间: 2015-1-18 12:12
+=是一元运算符会自动转换类型;而+是二元运算符,类型不同,需要强制转换
作者: sq_jun    时间: 2015-1-18 12:27
楼上说的都很好,a是byte型,5是int型,需要强制转换才能赋值,a+=5这么写的话会自动强制装换的,所以不会错
作者: Novice.Jin    时间: 2015-1-18 12:28
一步和两部的区别,+=是一步完成的
作者: 陈旭刚520    时间: 2015-1-18 14:43
范建海 发表于 2015-1-18 10:40
有错呀,大哥

哦   我昨晚太累了   少了一个后面的括号   不好意思啊
作者: iblackhorse    时间: 2015-1-18 16:14
这里涉及到 类型转换的问题,系统默认的是int类型,大于byte,a+=5,是默认有自动的隐藏性的转换,而,a=a+5,则是因为,a,会自动提升为int,运算之后是int型,而你定义的a是byte,这样会报损失精度的问题。
作者: 资博仁    时间: 2015-1-18 17:16
不管是哪种语言都没有你列举的下面的哪一种加法,都只有上面的一种,例如C语言,C++,java等
作者: 鹰击长空168    时间: 2015-1-18 19:06
byte,short,char一般会自动提升为int,所以容易出现类型不匹配,需强转
作者: qq772334237    时间: 2015-1-18 19:14
新手来涨姿势




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