黑马程序员技术交流社区
标题:
运算符的问题,,,,听说标题要长是吗?
[打印本页]
作者:
发哥-阿花
时间:
2013-11-27 20:15
标题:
运算符的问题,,,,听说标题要长是吗?
本帖最后由 发哥-阿花 于 2013-11-27 20:51 编辑
byte b = 1; b = b + 1;
byte b = 1; b = b += 1;
复制代码
上述两种定义,b直接加上1不行,这个懂,下面这种就可以,度娘了好久,愣是没找到。只是说下面这种方式是任意类型都可以。貌似老毕视频中也没讲到。求解救
作者:
衣带赞
时间:
2013-11-27 20:32
这个简单,把详细的代码写出来你就懂了。
byte b = (int) 1 ; 这就是你的第一句话,这个是正确的,可以通过编译,当=右边只有一个数据时,赋值符号=会检测右边的数据是否在规定的范围内,如果在,就转换成你定义的类型。
(byte) b = (byte) b + (int) 1 ; 这句话=右边有两个数据,当相加时会自动提升,为(int) b + (int) 1 再赋值给左边就会发生类型转化异常。
(byte) b =(byte) b +=(int) 1 ; 最后这句话,你要清楚它的运行顺序,=符号是从右往左的运算,也就是先运行(byte) b +=(int) 1 ; 注意+=是一个符号,不是两个符号,你去查运算符优先级表的时候就可以知道=和+=在同一级里面。所以这也相当于一个赋值,只不过是先检测两边的和是否在byte范围内,如果在,就转化成byte类型并赋给左边。后面就是(byte) b = (byte) (b+1);了,所以b最终是byte类型
作者:
发哥-阿花
时间:
2013-11-27 20:50
衣带赞 发表于 2013-11-27 20:32
这个简单,把详细的代码写出来你就懂了。
byte b = (int) 1 ; 这就是你的第一句话,这个是正确的,可以通 ...
讲的比老毕详细多了,刚刚去回顾,,,真的有讲,还是N年前面试题,,,谢谢啦
作者:
jing迪
时间:
2013-11-27 21:32
byte b = 1; b = b + 1;
byte b = 1; b = b += 1;
第一句话右边有变量参与,所以会自动类型转换成int型int赋值给byte需要强制类型转换,第一句话没有转换所以错误
第二话虚拟机会自动在底层进行类型转换 如果值不大于左边的类型 就赋值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2