java面试题inti=2;i+=i-=i*i的值以及关于i++;++i;i=i+1;i+=1 的效率问题

本文讨论了Java表达式i+=i-=i*i在不同环境下可能产生的不同结果,尤其指出在VC环境下结果为-4的疑惑。同时,文章对比了i=i+1、i+=1、i++和++i四种自增操作的执行效率,指出++i的过程最为高效,因为它避免了中间变量的赋值步骤。
摘要由CSDN通过智能技术生成
一. 先解说一个简单的例子:  int i=5;  i+=i-=1; 
这式子相当于是 i+=(i-=1); 
i-=1后得到4, 但还来不及存入i, 就把得到的4加入刚开始的i, 
之后i变成是9
这式子翻成bytecode 为
         0: iconst_5
         1: istore_0
         2: iload_0
         3: iinc          0, -1
         6: iload_0
         7: iadd
         8: istore_0

本题 i=2;  i+= i-= i*i;
相当于 i=2;  i+= (i-= i*i);

i-=i*i 变 -2, 再加入原先的i 得到0.

为什么在VC 下面运行,结果为-4? 哪位大神可以帮助解答?

#include "stdio.h"

int main(){
	int i=2;
	int j=2;
	int temp = j+=j-=j*j;
	printf("j=%d\n",temp);
	printf("i+=i-=i*i=%d\n",i+=i-=i*i);
	return 0;
}


二. 

(1) i=i+1 

它的效率最低,因为其执行过程如下: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值