int j=0;
for(int i=0;i<100;i++){
j=j++;
}
out.println(j);// 0
for(int i=0;i<100;i++){
j=j++;
}
out.println(j);// 0
解决方案 »
- 对于含有日期格式的list,如何利用json将其正确解析出来?
- 求教,如何将基于ibatis的jpetstore工程改写为基于hibernate...
- 在js中使用window.open无法打开以.docx或.xlsx文件
- 通过代理访问webservices问题(急啊),高手请进
- 一楼兄弟:
- oracle迁移到sqlserver的存储过程问题 !
- 寻高手做一电子商务类网站(Java架构)[北京]
- Applet运行时的JRE路径问题
- float 型如何转化为 String
- 已经有一棵tree,有什么办法可以得到他的root节点?
- Excel导出 文件0字节的问题
- 一个稍微复杂一点的时间计算。 囧~~~~~~~~
j = j;
j++;
第一次运行时 j = 0++ 此时J仍为0 第二次,第三次,一直循环下去所以直到最后J 仍为0
顶大胡子一个其实就是后置++的问题。先把 旧的 j的值赋给j然后再把旧的j+1
for(int i=0;i<100;i++){
j=++j;
}
System.out.println(j);// 100这样写就是你要的了
int k = 0;for (int i = 0; i < 100; i++) {
k = j++;
}out.println(k);
这时的j=1,j++这个实体等于0。然后将j++的值附给j
j这时候等于0、for循环了100次,因为每次循环前j=0,所以每次输出后的还是0。
8: iinc 1, 1
11: istore_1
先将 j 的值(0)压入到栈中, 然后再j+1。 再将栈中的值取出来赋给j
也就是说j++ 等于无效
7楼是从字节码的角度,解释了这一过程的内存的变化
public class Test {
public static void main(String args[]) {
int j = 0;
for (int i = 0; i < 100; i++) {
j=j++;
//j = ++j;
System.out.println("i="+i);// 0
System.out.println("**********");// 0
System.out.println("j="+j);// 0
}
System.out.println("j2="+j);// 0 }
}
i=0
**********
j=0
i=1
**********
j=0
i=2
**********
j=0
i=3
**********
j=0
i=4
**********
j=0
i=5
**********
j=0
i=6
**********
j=0
i=7
**********
j=0
i=8
**********
j=0
i=9
**********
j=0
i=10
**********
j=0
i=11
**********
j=0
i=12
**********
j=0
i=13
**********
j=0
i=14
**********
j=0
i=15
**********
j=0
i=16
**********
j=0
i=17
**********
j=0
i=18
**********
j=0
i=19
**********
j=0
i=20
**********
j=0
i=21
**********
j=0
i=22
**********
j=0
i=23
**********
j=0
i=24
**********
j=0
i=25
**********
j=0
i=26
**********
j=0
i=27
**********
j=0
i=28
**********
j=0
i=29
**********
j=0
i=30
**********
j=0
i=31
**********
j=0
i=32
**********
j=0
i=33
**********
j=0
i=34
**********
j=0
i=35
**********
j=0
i=36
**********
j=0
i=37
**********
j=0
i=38
**********
j=0
i=39
**********
j=0
i=40
**********
j=0
i=41
**********
j=0
i=42
**********
j=0
i=43
**********
j=0
i=44
**********
j=0
i=45
**********
j=0
i=46
**********
j=0
i=47
**********
j=0
i=48
**********
j=0
i=49
**********
j=0
i=50
**********
j=0
i=51
**********
j=0
i=52
**********
j=0
i=53
**********
j=0
i=54
**********
j=0
i=55
**********
j=0
i=56
**********
j=0
i=57
**********
j=0
i=58
**********
j=0
i=59
**********
j=0
i=60
**********
j=0
i=61
**********
j=0
i=62
**********
j=0
i=63
**********
j=0
i=64
**********
j=0
i=65
**********
j=0
i=66
**********
j=0
i=67
**********
j=0
i=68
**********
j=0
i=69
**********
j=0
i=70
**********
j=0
i=71
**********
j=0
i=72
**********
j=0
i=73
**********
j=0
i=74
**********
j=0
i=75
**********
j=0
i=76
**********
j=0
i=77
**********
j=0
i=78
**********
j=0
i=79
**********
j=0
i=80
**********
j=0
i=81
**********
j=0
i=82
**********
j=0
i=83
**********
j=0
i=84
**********
j=0
i=85
**********
j=0
i=86
**********
j=0
i=87
**********
j=0
i=88
**********
j=0
i=89
**********
j=0
i=90
**********
j=0
i=91
**********
j=0
i=92
**********
j=0
i=93
**********
j=0
i=94
**********
j=0
i=95
**********
j=0
i=96
**********
j=0
i=97
**********
j=0
i=98
**********
j=0
i=99
**********
j=0
j2=0
j = a;相信你现在应该明白了吧。
for(int i=0;i<100;i++){
j++;
}
out.println(j);// 0
这样你就能输出100了
右边其实是个独立语句,也就是说右边是个运算式子。这点明白不?
j++; 他是一个独立的运算语句,没问题吧?整句话的意思就是: 将j++的值,赋给j
既然如此,我们先定义一个变量int a 来接收j++的值
int a = j++;如果你此时打印 a和j 的值,应该是a= 0;j=1;是吧?这点没问题吧? j++整个表达式的值为0,而j为1再将表达式的结果赋给a
也就是j = a;
那么此时j是不是变为0了列? 也就是说其实j 的值,被覆盖了。
j++这个表达式返回的值是j
++j这个表达式返回的值才是j+1所以 j = j++;
等价于 j = j;就这样~
大胡子,其实是先++后赋值的而且++后确实为1,但是赋值的时候初始变量覆盖了赋值结果,至于为什么我也没搞懂。public class Test {
public static void main(String[] args) {
int j=0;
for (int i = 0; i < 100; i++) {
j
=
j++;
System.out.println(j);
}
System.out.println(j);
}
}断点一看就明白。但是为什么会被初始变量覆盖呢!或者可以理解为没有赋值成功。大家一起深入研究研究。
int a = j++;j = a;这都不懂?
int temp = j;
j=j+1;
return temp;
}