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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦之蓝2015 初级黑马   /  2015-3-10 09:48  /  804 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int x;x=x+1;
x+=1;
x++;
运算的底层是什么?有什么区别
若果把变量换成byte x;呢

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1

查看全部评分

3 个回复

倒序浏览
如果你将x的类型变成byte的话,x=x+1就不回通过,提示你类型不匹配,其他的都通过,因为其他的在运算的过程中已经自转了
回复 使用道具 举报
首先x=x+1因为它的执行过程如下:1,读取右边变量 x 的内存地址;2,执行 x+1;3,读取左边变量 x 的内存地址,4将右边的值传给左边的变量 x(次运算并不是简单的比较大小而是在底层的物理地址)。
而x+=1是执行过程如下:1. 读取右x的地址;2. x=1;3. 将得到的值传给x(因为x的地址已经读出)。
在x++是执行如下:1.读取右边变量 x 的内存地址;2.变量 x 自增1。如果换成byte则x=x+1不能通过因为:
首先声明的x是属于byte短整形,在x=x+1中后面一段x+1里面1属于int型x就会有一个自动转换变成1所述的的int型然后x+1两个int类型的相加就得到int型在赋值给=前面的x型的时候前面属于byte类型,所以int型不能直接赋值给byte型出现错误容易丢失精度简单的说就是属于两部运算先算的是x+1然后在赋值给x.

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
int型没有问题,如果byte,x = x+1,会报错,因为运算时先将数据类型进行了自动提升。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马