黑马程序员技术交流社区

标题: 一个细节的小问题。。 [打印本页]

作者: 如果我长大了。    时间: 2013-8-11 10:18
标题: 一个细节的小问题。。
byte b = 10;
byte b = b+1;
编译时报错,但是在下面这个编译时为什么就不报错呢?我不能理解啊?
byte b=10;
byte b = ++b;
求解答啊 。。。
作者: 大漠月影    时间: 2013-8-11 10:52
你这两种都会报错吧??
同一方法内同一变量只能定义一次呀!!
作者: longlangcx    时间: 2013-8-11 11:12
你是想问这个吧。。
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变量没有任何问题。
作者: EYE_SEE_YOU    时间: 2013-8-11 11:44
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型
作者: 黑马王晓明    时间: 2013-8-11 15:43
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 16:13
大漠月影 发表于 2013-8-11 10:52
你这两种都会报错吧??
同一方法内同一变量只能定义一次呀!!

这不是同一方法内的同一变量被定义两次的问题的。。亲。
作者: 茶念小手    时间: 2013-8-11 22:03
byte b = 10;
byte b = b+1;
编译时报错,
byte b=10;
byte b = ++b;
因为++是表示自己加自己 也就是说
++B 相当于 byte类型的B 加上一个 byte类型的1 所以不会错
而B+1是相当于  byte类型的B 加上一个  int类型的1 所以不行
作者: masterV    时间: 2013-8-11 22:48
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类型变量的自增,不涉及类型匹配问题。

与君共同进步。
作者: yangxin540    时间: 2013-8-12 11:36
黑马王晓明 发表于 2013-8-11 15:43
byte b = 10;
byte b = b+1;//b是一个变量,它的值是不确定的,可以改变的,变量再加1有可能就会超出它的 ...

其实byte b = ++b;它是同一类型,不存在不同类型的强转,java默认是允许这样存在的
作者: 以防万一    时间: 2013-8-13 22:23
亲,如问题已解决请将分类的未解决改为已解决。

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


保持队形,谢谢合作
作者: 以防万一    时间: 2013-8-13 22:24
亲,如问题已解决请将分类的未解决改为已解决。

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


保持队形,谢谢合作




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