`

j=j++与j=++j的区别

    博客分类:
  • Java
阅读更多
jvm里面有两个存储区,一个是暂存区(是一个堆栈),另一个是变量区。
语句istore_1是将堆栈中的值弹出存入相应的变量区(赋值);语句iload_1是将变量区中的值暂存入堆栈中。
因为j = j++;是先将j的值(0)存入堆栈,然后对变量区中的j自加1,这时j的值的确是1,但是随后的istore_1又将堆栈的值(0)弹出赋给变量区的 j,所以最后j = 0。 也就是说你执行100次j=j++,最后j也是0,但是你要是j=++j执行100次最后j=100,原理因为j = ++j;是先对变量区中的j自加1,然后再将变量区中j的值(1)存入堆栈,虽然最后执行了istore_1,但也只是将堆栈中的值(1)弹出赋给变量区的j,所以j = ++j;的结果是j = 1。





i++的情况
iconst_0  得到或创建一个初始常量值0
istore_1  将初始值0赋给i(这个0是来自暂存区,i是变量区)
iload_1    i要开始自增了,先加载,值是0(自增运算是在暂存区中进行,因此加载的值0放入暂存区)
iinc 1,1    i自增为1(这个计算结果仍在暂存区)
istore_1   将值再赋给i (将暂存区的计算结果赋给变量区的变量i)

++i的情况
iconst_0
istore_1
iinc 1,1
iload_1
istore_1
分享到:
评论

相关推荐

    一个很简单的冒泡排序算法

    一个很简单的冒泡排序算法 void BubbleSort(double a[],int n) { int i,j,flag=1; double temp;... if(a[j]>a[j+1]) { flag=1; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } }

    数据结构矩阵相乘

    Q[i][j] += M[i][k] * N[k][j]; } } } cout , Q = M * N:\n"; for(int i = 0; i ; ++i, cout ) { for(int j = 0; j ; ++j) { cout [i][j] ; } } return 0; } ``` 这段代码首先获取两个矩阵的维度,并...

    c++ KMP 的模板(附详细解释)

    = t[j + 1]) j = nxt[j]; if(t[i] == t[j + 1]) j++; nxt[i] = j; } j = 0; for(int i = 1; i <= lens; i++) { while(j && s[i] != t[j + 1]) j = nxt[j]; if(s[i] == t[j + 1]) j++; if(j == lent) ...

    1192: C3二维数组扫雷游戏地雷数计算

    for(int j=1;j<=b;j++){ cin>>c[i][j]; } } for(int i=1;i<=a;i++){ for(int j=1;j<=b;j++){ if(c[i][j]=='?'){ z=0; for(int q1=i-1;q1<=i+1;q1++){ for(int q2=j-1;q2<=j+1;q2++){ ...

    数据结构程序设计.txt

    j++) { if(i>j) A[i][j]=A[j][i]; else A[i][j]=A[i][j]; } } printf("输出对称矩阵:\n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%-4d",A[i][j]); printf("\n"); } k=0; for(i=1;i<=n;i++) for(j=1;j<=n;j...

    最长公共子序列算法C++实现

    最长公共子序列问题 for ( i = 0; i < m+1; i++) ... else if(c[i-1][j]>=c[i][j-1]) { c[i][j]=c[i-1][j]; b[i][j]=2; } else { c[i][j]=c[i][j-1]; b[i][j]=3; }

    数值分析C源代码程序

    可以用来解方程组 for(k=0;k;k++) { if(a[k][k]==0) return 0; for(i=k+1;i;i++) { m[i][k]=a[i][k]/a[k... {aa[i][j]=a[i][j]-m[i][k]*a[k][j]; a[i][j]=aa[i][j]; } b1[i]=b[i]-m[i][k]*b[k]; b[i]=b1[i]; }

    ag.rar_SUM

    词法分析程序,可对以下的C源程序进行分析:main() {int a[12] ,sum for(i=1 i<=12 i++) {for(j=1 j<=12 j++)scanf("%d",&a[i][j]) } for(i=12...=1 j--){ if(i==j&&i+j==13)sum+=a[i][j] } } printf("%c",sum) }

    疯狂五笔输入法

    键jjv=钅j+廴jv 这adwo=辶ad+文wo 卵medd=卯me+丶d+丶d 6、后缀,o和z无意义 爱=a 爱=aoo 乙=ao 乙=aooo 比=bz 比=bzoo 匕=bzo 7、字根表,/举例 A(zh) ao乛乙=折 ao爱 aa专=专a+乛a ad之辶=之a+...

    大整数的乘法----

    temp+=(m[l-i]-48)*(n[l-j]-48); } } } v=(temp+t)%10; s[k]=v; t=(temp+t)/10; k++; } temp=0; for(i=0;i<=l;i++) { for(j=0;j<=l;j++) if((i+j)==k-1) { temp+=(m[l-i]-48)...

    QCD和$$ s ^ {PC} = 1 ^ {+-} $$ JPC = 1的$$ ss {\ bar {s}} {\ bar {s}} $$ sss´s四夸克态的规则研究 +-

    我们应用QCD和规则的方法研究BESIII协作在$$ J / \ psi的2.0–2.1 GeV区域的$$ \ phi \ eta ^ \ prime $$ ϕη'质谱图中新观察到的结构X \ rightarrow \ phi \ eta \ eta ^ \ prime $$ J /ψ→ϕηη'衰减。...

    linux GTK+单词统计程序课程设计

    1、按照规则计算单词的值,如果A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 26个字母(全部用大写)的值分别为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 , 如 WINJACK这个...

    母函数的相关操作不懂的兄弟可以来看看很好的

    #include ... c2[j+k] += c1[j]; } // for_j for (j = 0; j <= n; j++) { c1[j] = c2[j]; c2[j] = 0; } // for_j } // for)i printf("%d\n", c1[n]); } // while return 0; }

    linux下GTK+2.0开发的单词数值计算器

    1、 按照规则计算单词的值,如果 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 26个字母(全部用大写)的值分别为1 2 3 4 5 6 7 8 9 10 11 12 13 1 15 16 17 18 19 20 21 22 23 24 25 26, 如 WINJACK这个...

    gtk单词计数器

    1、按照规则计算单词的值,如果A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 26个字母(全部用大写)的值分别为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 , 如 WINJACK这...

    基于java的简单五子棋系统

    =0&&zuobiao[i][j]==zuobiao[i+1][j]&&zuobiao[i][j]==zuobiao[i+2][j]&&zuobiao[i][j]==zuobiao[i+3][j]&&zuobiao[i][j]==zuobiao[i+4][j]) { if(one) { g.setColor(Color.red); g.drawString("甲方胜利!...

    falsecoin.java

    p[j]=scan.nextInt(); } for(int j=1;j<=x;++j){ q[j]=scan.nextInt(); } char[] str=new char[10]; str[0]=scan.next().charAt(0); switch (str[0]){ case '=': for(int j=1;j<=x;++j){ isTrue[p[j]]=1;...

    动态规划解决0-1背包

    void knapsack(int val[],int wei[],int c,int n,int**m) //求最优值 { int jmax=min(wei[n]-1,c);...m[i][j]=m[i+1][j]; for(int jj=wei[i];jj<=c;jj++) m[i][jj]=max(m[i+1][jj],m[i+1][jj-wei[i]]+val[i]); }

    [USACO 1.2.2]方块转换.cpp

    #include<bits/stdc++.h> using namespace std; int n; int ans; char a[15][15], b[15][15],c[15][15]; ... d[i][j]=c[i][j]; } } 省略…… [USACO 1.2.2]方块转换答案 想要完整思路请关注+私信

    哥德巴赫猜想.cpp

    m+=2) { for(i=3;i<=m/2;i+=2) {k=sqrt(i); for(j=2;j<=k;j++) { a=i%j; if(a==0) break;} if(j==k+1) { b=sqrt(m-i); for(j=2;j<=b;j++) { s=(m-i)%j; if(s==0) break;}; ...

Global site tag (gtag.js) - Google Analytics