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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 如果我长大了。 中级黑马   /  2013-8-11 10:18  /  1390 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte b = 10;
byte b = b+1;
编译时报错,但是在下面这个编译时为什么就不报错呢?我不能理解啊?
byte b=10;
byte b = ++b;
求解答啊 。。。

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

10 个回复

倒序浏览
你这两种都会报错吧??
同一方法内同一变量只能定义一次呀!!
回复 使用道具 举报
你是想问这个吧。。
byte b1 = 10;
byte b2 = b1 + 1; //error: b1是一个变量,在编译时无法确定其值,因此与1相加后得到的是一个int值,将int赋值给一个byte会损失精度,所以报错。

byte b1=10;
byte b2= ++b1;  //ok: b1是一个byte,而++b1依然是一个byte,属于是一个byte的自操作,在发生溢出时会自动丢弃溢出位。将一个byte赋值给一个byte变量没有任何问题。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报 1 0
byte b = 10;
//这里int型的10,不参与运算,属于在byte的合法赋值范围,不报错


byte b = b+1;
//因为上一条式子中已经声明b为byte型,所以这里的byte可以去掉了
//因为后式中的1是int型,b是byte型,于是运算中默认提升为本式中最大类型int
//b+1在运算中已经自动提升为int类型,直接赋给byte类型会报错,就算属于byte赋值合法范围内也需要强制进行转换
//即 b=(byte)(b+1);也可以改写为 b+=1 ,不会报错

byte b = ++b;
//同样的,把这里的byte去掉
//++b本身的意思就是b+=1了,所以b=也可以去掉了
//++b等于  【 类型】b=(类型)(b+1 )  b是byte型的,所以byte b= (byte)(b+1),不会报错
//byte,short,char之间不会自动发生类型转换,如果进行运算,会优先转换为int型

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
byte b = 10;
byte b = b+1;//b是一个变量,它的值是不确定的,可以改变的,变量再加1有可能就会超出它的取值范围 比如之后把b改为了127 你又加1 超出了byte取值范围 而且这种方式也没有把128强制转换成byte 所以编译报错
编译时报错,但是在下面这个编译时为什么就不报错呢?我不能理解啊?
byte b=10;
byte b = ++b;//这种方法默认会有强制转换机制  即使超出了byte范围 (byte)++b 也会把它强制转成byte类型 会损失精度
求解答啊 。。。
回复 使用道具 举报
大漠月影 发表于 2013-8-11 10:52
你这两种都会报错吧??
同一方法内同一变量只能定义一次呀!!

这不是同一方法内的同一变量被定义两次的问题的。。亲。
回复 使用道具 举报
byte b = 10;
byte b = b+1;
编译时报错,
byte b=10;
byte b = ++b;
因为++是表示自己加自己 也就是说
++B 相当于 byte类型的B 加上一个 byte类型的1 所以不会错
而B+1是相当于  byte类型的B 加上一个  int类型的1 所以不行
回复 使用道具 举报
longlangcx 发表于 2013-8-11 11:12
你是想问这个吧。。
byte b1 = 10;
byte b2 = b1 + 1; //error: b1是一个变量,在编译时无法确定其值,因 ...

恩,说的很好,学习了。

byte b = b+1;
提示的错误为:Type mismatch: cannot convert from int to byte,因为整数1默认是int类型的。
byte b = ++b;
这个属于byte类型变量的自增,不涉及类型匹配问题。

与君共同进步。
回复 使用道具 举报
黑马王晓明 发表于 2013-8-11 15:43
byte b = 10;
byte b = b+1;//b是一个变量,它的值是不确定的,可以改变的,变量再加1有可能就会超出它的 ...

其实byte b = ++b;它是同一类型,不存在不同类型的强转,java默认是允许这样存在的
回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马