一个牛逼的问题 哈哈 JAVA/AS3/C# 这里托管语言和C++/C的 代码解释差异

声明一个int型的i=0

i = i++;
打印i

C++/C 里面输出1

as3/java/c# 里面输出0

为什么呢???


嘻嘻

很明显 在AS3/JAVA/C#这种托管型面向对象语言中

当遇到这种声明时 我觉得他们在底层开辟了2个管道, 也就是再复制了有一个对象i 和原对象i
是2个 内存地址了 然后一个指针在指2个地址, 后i拷贝到前面的i上, 指针指导前一个上
但是++ 属于=后的管道i
所以 输出i=0;

而在C++ 中 i将会指向同一快内存地址 因此结果i


网上一个网友的解释:


java里的i++
iconst_0
istore_1
iload_1
iinc 1,1
istore_1

因为这里jvm会将i的初始值(0)暂存入堆栈,然后对变量区的i进行自加,而istore_1又会接着把堆栈的i(0)赋给变量区的i,所以最后i还是0,FP的情况应该是一样的,如果换成i=++i就会得到1,原因是因为i=++i是先对变量区中的i自加1,然后再将变量区中i的值(1)存入堆栈


我觉得更直接~ 从底层说明了原因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值