x=x+1、x+=1和x++的不同

原创 2007年09月27日 13:16:00
        之前一直习惯性的认为java语言中x=x+1、x+=1和x++仅仅是书写表示方法的不同,没想到细细研究,差别还是不小的。
从执行效率上讲,x=x+1<x+=1<x++
就拿x=x+1来说,分别要对左右两侧的x取址两次,编译器不会认为两侧的x的地址是同一个地址,所以效率最低。

也许在java上这样细抠效率有“掉书袋”之嫌,那不考虑效率问题,在某些场合,这三者甚至不是等价的。
譬如如下程序片段
……
byte x=1;
x=x+1;
……

结果编译的时候就会报错,因为x+1得到的是一个int型值,如果赋值给byte型的x,需要强制类型转换,如下所示:
……
byte x=1;
x=(byte)(x+1);
……


但如果你将x=x+1换成x++或x+=1,都能够顺利通过编译。

x = x+1,x+=1,x++那个的执行效率高

x = x+1的效率最低 1)读取右边x的地址   2)执行x+1  3)读取左边x的地址   4)将右边的值传递给左边的x(编译器并不认为左右边的x地址相同) x +=1 效率其次 ...
  • aidem_brown
  • aidem_brown
  • 2014年10月04日 15:25
  • 522

Python 进阶 —— x = x+1 vs x += 1

(1)x += 1in-place(就地)修改 x 自身的值, (2)x = x + 1 会隐式地创建一个新的对象,表示 x 与 1的和,同时用同样的 name 指向它,所以它的含义和y = x+1相...
  • lanchunhui
  • lanchunhui
  • 2016年04月25日 23:03
  • 1633

x=x+1,x+=1,x++在java中的效率问题

原帖链接 x=x+1最低,因为它的执行过程如下:   1. 读取右x的地址;   2. x+1;   3. 读取左x的地址;   4. 将右值传给左边的x(编译器并不认为左右x的地址相同)....
  • sunfei7777
  • sunfei7777
  • 2015年03月15日 15:38
  • 230

x=x+1,x+=1,x++效率的两种说法

有次翻关于招聘的书,上面有道题:x=x+1,x+=1,x++,哪个效率最高?我上网查后发现,有以下2种说法: x=x+1最低,因为它的执行过程如下:   1. 读取右x的地址;   2. ...
  • npu_wy
  • npu_wy
  • 2013年12月20日 10:47
  • 1123

c++ x=x|(x+1); x&(x-1)

x=x|(x+1);每次都将x从右往左第一个0变成1,直至全部变成1并溢出 x&(x-1)统计1的个数,x|(x+1)统计0的个数 链接:https://www.nowcoder.com/qu...
  • u012145971
  • u012145971
  • 2017年09月14日 11:46
  • 212

x=x+1、x+=1、x++、++x

1、x=x+1     编译器首先寻找右边x的地址,然后读取该地址中x的值并放入寄存器,再在寄存器中将x的值加1,接着寻找左边x的地址(编译器不知道右边的x就是左边的x),将刚才的计算结果存到该地址中...
  • matengzZ
  • matengzZ
  • 2014年12月10日 13:18
  • 503

x=x+1,x+=1,x++的区别

x=x+1 最低,因为它的执行过程如下: 读取右边变量 x 的内存地址; 执行 x+1; 读取左边变量 x 的内存地址; 将右边的值传给左边的变量 x(编译器并不认为左右两边的变量 x 的内存地...
  • mjy2011
  • mjy2011
  • 2011年09月23日 10:08
  • 871

x=x+1,x+=1及x++的效率哪个最高?

x++最高,因为它的过程:1.读取x的地址2.x自增1x+=1其次:1.读取左边x的地址2.x+13.将得到的值传给xx=x+1最低:1.读取右边x的地址2.x+13.读取左边x的地址4.将右边的值给...
  • zzsyzjb
  • zzsyzjb
  • 2010年11月21日 21:25
  • 387

Java中关于x++与++x在运算中值的变化

首先(x++)+1中的小括号毫无意义,小括号并不会改变++运算的优先级, 对表达式自增运算符加括号绝大部分是因为需要进行代码的格式化, 并告诉java++应该是如何被解释的,否则x+++x只会有一...
  • cdestiny
  • cdestiny
  • 2012年07月09日 19:25
  • 1822

x=x+1,x+=1,x++的效率问题?

196:  x=x+1; 00401FB4   mov         eax,dword ptr [ebp-8] 00401FB7   add         eax,1 00401FBA  ...
  • csw_100
  • csw_100
  • 2010年06月14日 00:54
  • 375
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:x=x+1、x+=1和x++的不同
举报原因:
原因补充:

(最多只允许输入30个字)