Topic: 一个简单(i=i++; 的字节码指令) |
Print this page |
1.一个简单(i=i++; 的字节码指令) | Copy to clipboard |
Posted by: microjuz Posted on: 2006-01-22 00:28 int i=0; i=i++; System.out.println(i); //为什么打出来的是0呢? 查看字节码指令如下: 0: iconst_0 1: istore_1 2: iload_1 3: iinc 1, 1 6: istore_1 7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 10: iload_1 11: invokevirtual #3; //Method java/io/PrintStream.println:(I)V 14: return 请结合上面的指令执行解我的迷惑,谢谢!! |
2.Re:一个简单(字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: why Posted on: 2006-01-22 04:37 Why would anyone write a line like this: i = i++; ? Why do you want to solve this puzzle by viewing the bytecode? |
3.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: microjuz Posted on: 2006-01-22 11:20 i=i++;的写法确实不对 这是我昨天在一个文档中看到的题目,觉得应该和vm有关系,所以查看字节码,但是还不太熟,如果有高手能解释一下就好了:) |
4.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: why Posted on: 2006-01-22 11:36 0: iconst_0 //pushes int 0 onto the stack (stack has 0 now) 1: istore_1 //pops int to local variable position one (i.e. i=0) 2: iload_1 //pushes int from local variable position one (stack has 0) 3: iinc 1, 1 //increments local variable position one (i.e. i=i+1=1) 6: istore_1 //pops int to local variable position one (i.e. i=0) |
5.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: microjuz Posted on: 2006-01-22 12:21 为什么 6: istore_1 //pops int to local variable position one (i.e. i=0) 取出来的是0不是1呢,上面一步inc不是把i变成1了吗??? 就这个地方,指令的意思我查资料都明白了~~ |
6.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: why Posted on: 2006-01-22 12:59 microjuz wrote: 不知閣下明白甚麼呢? pops int (from stack) to local variable position one 注意 2: iload_1 //pushes 0 onto the stack |
7.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: jigsaw Posted on: 2006-01-22 14:49 有意思。。。local var i is set to 1 at line 3, while line 6 set i back to 0, since line 6 simply pops 0 from stack...am i right? |
8.Re:一个简单(i=i++; 的字节码指令) [Re: jigsaw] | Copy to clipboard |
Posted by: why Posted on: 2006-01-22 21:20 jigsaw wrote: I think so. IOW, i++ has no effect in this statement. |
9.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: microjuz Posted on: 2006-01-23 23:51 o 请不要用那么阁下那么酸酸的字眼撒~~ |
10.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: why Posted on: 2006-01-24 00:45 microjuz wrote: 那先請不要說"指令的意思我查资料都明白"這種話 敝人倒真的想知道閣下明白甚麼,不明白甚麼 子曰:知之為知之,不知為不知,是知也 |
11.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: ym21682 Posted on: 2006-02-07 15:51 i = i++;运行过程如下 1. 先将i=0赋给i 2. 将i自加,此时虽然i本身存值为1,但表现出来的仍然是0 注:可与++i相比较 |
12.Re:一个简单(i=i++; 的字节码指令) [Re: ym21682] | Copy to clipboard |
Posted by: javadd Posted on: 2006-02-07 17:01 ym21682 wrote: 我想也是这样. |
13.Re:一个简单(i=i++; 的字节码指令) [Re: why] | Copy to clipboard |
Posted by: microjuz Posted on: 2006-02-15 23:22 why wrote: 呵呵-_-!!!看来我还真要学下怎么提问题了,其实我在说这句话的时候本意是让各位天才知道我查过inside the vm中这几条指令的解释 whywhy兄教训的是 |
14.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: javaguan2 Posted on: 2006-02-23 14:22 我想学JAVA不应该钻研这个问题,i++和++i的问题入门的人都知道。 如果你是想研究虚拟机的话(看楼主提出的问题,对虚拟机的了解应该很皮毛),我觉得这里没有多少人会有时间钻研了 |
15.Re:一个简单(i=i++; 的字节码指令) [Re: microjuz] | Copy to clipboard |
Posted by: why Posted on: 2006-02-24 03:15 microjuz wrote: 重要的是閣下明白甚麼,不明白甚麼 查過又怎樣?查過不等如研讀過,研讀過不一定明白了 javaguan2 wrote: 同意 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |