500字范文,内容丰富有趣,生活中的好帮手!
500字范文 > java ++i i++ i++ + ++i i++ + i++原理

java ++i i++ i++ + ++i i++ + i++原理

时间:2023-04-26 15:46:53

相关推荐

java ++i i++ i++ + ++i i++ + i++原理

先上代码:

public static void main(String args[]) {int A = 1;int B = 10;int C = 100;int D = 1000;System.out.println(A++);System.out.println(++B);System.out.println(C++ + C++);System.out.println(C);System.out.println(D++ + ++D);System.out.println(D);}

在来运行结果:

1110220021002Process finished with exit code 0

Reason:

前两个可能大家都比较容易理解,我们这里只简单的介绍后两个原因:

(1)C++ + C++:

36: iload_337: iinc3, 140: iload_341: iinc3, 144: iadd45: invokevirtual #3 // Method java/io/PrintStream.println:(I)V48: getstatic#2 // Field java/lang/System.out:Ljava/io/PrintStream;51: iload_352: invokevirtual #3 // Method java/io/PrintStream.println:(I)V55: getstatic#2 // Field java/lang/System.out:Ljava/io/PrintStream;

上面是(1)相关操作的JVM字节码:

36-iload_3操作:JVM首先将局部变量表中位置为3的元素(即100)压入栈顶。

37-iinc 3, 1操作:然后将局部变量表中位置为3的元素的值进行了+1的操作,注意此时栈顶元素的值并未变化,仍为100。

40-iload_3操作:JVM再次将局部变量表中位置为3的元素(即101)压入栈顶。

41-iinc 3, 1操作:然后再次将局部变量表中位置为3的元素的值进行了+1的操作,此时局部变量表中位置为3的元素的值变成102。

44-iadd操作:将栈顶的两个元素101及100相加再次压入栈顶,此时栈顶元素变成了201.

45、48操作:print栈顶元素的值,结果输出201

51-iload_3操作:将局部变量表中位置为3的元素(即102)压入栈顶。

52、55操作:print栈顶元素的值,结果输出102

(2)D++ + ++D:

58: iload 460: iinc4, 163: iinc4, 166: iload 468: iadd69: invokevirtual #3 // Method java/io/PrintStream.println:(I)V72: getstatic#2 // Field java/lang/System.out:Ljava/io/PrintStream;75: iload 477: invokevirtual #3 // Method java/io/PrintStream.println:(I)V

上面是(2)相关操作的JVM字节码:

58-iload_4操作:JVM首先将局部变量表中位置为4的元素(即1000)压入栈顶。

60-iinc 4, 1操作:然后将局部变量表中位置为4的元素的值进行了+1的操作,注意此时栈顶元素的值并未变化,仍为1000。

63-iinc 4, 1操作:JVM再次将局部变量表中位置为4的值进行了+1的操作,此时值变成了1002。

66--iload_4操作:JVM再次将局部变量表中位置为4的元素压入栈顶。

68-iadd操作:将栈顶的两个元素1002及1000相加再次压入栈顶,此时栈顶元素变成了2002.

69、72操作:print栈顶元素的值,结果输出2002

75-iload_4操作:将局部变量表中位置为4的元素(即1002)压入栈顶。

52、55操作:print栈顶元素的值,结果输出1002

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。