int i = 0; int p = 0; for(int j = 0;j<100;j++) { p = i++; } System.out.println(p); 输出99 int i=0; int p = i++; System.out.println(p); 输出0 我个人认为不是跟打印有关于,跟运算符"+"重载有关
i= ++i; 相当于 先加 再 赋值 i= i++; 反过来
i =i++ 是先给i赋值后返回值 然后在自加运算,但是自加运算是在一个语句块中运行相当于一个局部变量,运行玩一次之后进行垃圾回收,对全局变量没影响 ,进行下次运算的时候还是用全局变量的值
当然是0了 ,以为i++就没有调用,如果你输出i++的话就好,这是java中的一个很重要的知识
因为i=i++,他是先把i的值付给前面的i,然后再在i的基础上+1
因为i=i++;记j=i=i++;你打印的相当于j,这里的j为0,所有结果为0
++i,先把i加1,再管其他的,i++先管其他,再加一
稍微看下就能理解i++ 与 ++i了 其实对于i=i++这个式子本身就不是太规范吧
int i = 0; i = i++; 等同于: int i = 0; int t = i; i = i + 1; i = t;
i=i++; 这一句又将0赋给i了,之后没有i++语句。所以i的值是0.
int i=0; i++; System.out.println("i="+i); 输出的结果是 就为1了
等同于:
i = i;
i = i + 1;
i = 0;
for(int j = 0;j<100;j++) {
i=i++;
}
System.out.println(i);
结果仍然是0 这个看着更爽 哈哈
i = i++;相当于:
i = i + 1;此时i的值在内存中变成1,但是i = i的时候i还用的0,又将i的值变回成0,所以结果是0.记得《java解惑》里有这个题
i=++i;
System.out.println("i="+i);
应该可以!
首先计算了i++,由于这个++是后置的,所以i的值并没有改变,但的确得到了一个i+1的结果,这个结果被暂时存在某个地方。
接下来,你赋值i,相当于是用i赋值他本身,结果肯定就还是0了。
也就说,i++的计算结果,你在这个等式里是找不到的。如果是i=++i
就不一样了,也是先计算++i,由于这个++是前置的,所以i+1的结果直接就赋值给他自己了。
然后,再赋值一次i,就相当于把i+1这个结果再次赋值给i了。
实际上这样子没啥意义,i=++i还浪费时间,多了一次赋值运算。
不如就直接++i呢。:)
int i=0,temp;
temp = i++;
i=temp;
他编译执行的过程是这样滴
i = i+1;
所以是先把i打印,后i在加1
等同于:
int temp = i;
i++;
i = temp;
int i=0;
i=++1;
System.out.println("i="+i);
那么输出的结果就是1
看我12L的回复
i实际上进行了计算,只不过计算结果没有存储到i中来
int i=0;
i=i++;jvm指令
0: iconst_0 # 将整数0压到栈顶
1: istore_1 # 将栈顶int型数值存入变量 i=0
2: iload_1 # 将变量压入栈顶(把i的值放入栈顶)
3: iinc 1, 1 # 将i的值增加一
6: istore_1 # 将栈顶值存入i变量(i的值增加之后并没有压入栈顶,栈顶元素仍然是0)
实际上 ,这个结果根据不同的语言 ,结果不同的。
在java中 是0.运行的情况与12楼说的一样 。但是在C/C++ ,或者其他语言中的情况又不一样。
楼主可以试一试。要根据编译器而定。不要太在意这个问题。
int i = 0;
i = i++;
System.out.println("i = "+i);
int j = i;
System.out.println("j = "+j);
结果都等于0可以证明
for(j = 0 ;j<100;j++){
i = i++;
System.out.println(i);
}
这样输出全是零 二楼说的对
但具体我也不理解 希望有人解释
我猜测有可能与+重载有关!!!!!
希望有人可以解释
先从 int i = 0; int j = i++;开始说起,此时执行结果为 j=0; i=1;
那么它的执行过程是怎样的呢?无论 i++ 还是 ++i i必定执行加1操作,所不同的是:
int j = ++i;是将i加1后的值赋给j,也就是通常所说的先加1再赋值,Ok,重点来了,int j = i++;是这样执行的:j最后一定获得的是i未加1前的初始值!
也就是这样的过程:int temp = i; i = i+1; j = temp;
Ok,上面的三句代码才是我们所说的 int j = i++; 先赋值后自加的真相!
那么, i = i++;就好理解了,i最后一定要获取i未加1之前的初始值,所以:
int temp = i; i = i+1; i = temp; i最终还是回到了自己的初始值!我文字组织能力不强,不知道楼主是否看懂了,希望能够帮到楼主。
i=i++;
System.out.println("i="+i);
输出的结果是0,为什么?因为
(1)
i=i++ 相当于两步操作:
第一步:i=i;
第二步:i+1;//注意第二步的时候没有赋值给i了,所以 i的值依然为0PS:如果你要打印i=1的话,用i=++i;就行了,因为i=++i相当于这两步操作:
第一步:i=i+1;
第二步:i=i;//可以比较两者的区别,很容易发现,其实是运算符优先级的问题。这主要是i++和++i的问题,前者i++是先用再加,后者++i是先加再用建议楼主可以查看java基础课程中的运算符优先级,那里很多这样的案例,祝你好运。
i = i+1;
System.out.println("i="+i);
相当于
int j=i;
int k=i+1;
i=k;
i=j;
int p = 0;
for(int j = 0;j<100;j++) {
p = i++;
}
System.out.println(p); 输出99 int i=0;
int p = i++;
System.out.println(p); 输出0
我个人认为不是跟打印有关于,跟运算符"+"重载有关
i= i++; 反过来
其实对于i=i++这个式子本身就不是太规范吧
i = i++;
等同于:
int i = 0;
int t = i;
i = i + 1;
i = t;
这一句又将0赋给i了,之后没有i++语句。所以i的值是0.
i++;
System.out.println("i="+i);
输出的结果是 就为1了