public class Person
{
public static void main(String[] args)
{
int i=0;
i=i++;
System.out.println("i="+i);
}
}
输出i=0
{
public static void main(String[] args)
{
int i=0;
i=i++;
System.out.println("i="+i);
}
}
输出i=0
System.out.println("i="+i);
这一句才是使用了i,这句执行后再加1
1、计算表达式(i++)的值,其实也就是:i,那么算出来就是 0
2、执行:i++运算
3、因为右边表达式没内容了,所以右边最终的取值就是 0
3、执行赋值 i = 等号右边的值,那么也就是 0 了
楼主如果没搞懂的话,请把:
i=i++;
修改为:
i=i++ + i++;
结果是“1”,再想想应该就能理解了。
开始 i=i => i=0 => 运行++ i=1了 ==》 然后又运行了一次= i=(0++)
所以i=0吗?
开始 i=i => i=0 => 运行++ i=1了 ==》 然后又运行了一次= i=(0++)
所以i=0吗?
执行顺序:
1、计算表达式第一个(i++)的值,那么是 0
2、执行 i++ 运算,那么 i 是 1;此时表达式变成了: i = 0 + i++
3、计算表达式第二个(i++)的值,那么是 1
4、执行 i++ 运算,那么 i 是 2;此时表达式变成了: i = 0 + 1
5、右边表达式计算完毕了,最终取值是 1
6、执行赋值 i = 等号右边的值,那么也就是 1 了看看能理解么?
++在i后 先把0付给i之后i再加1
i=0 i++=1
public class Test
{
public static void main(String[] args) {
int i = 0;
i = i++;
System.out.println("i = " + i);
System.out.println("i = " + i);
int a = i++;
System.out.println("i = " + i);
System.out.println("i = " + i);
i = i + 1;
System.out.println("i = " + i);
System.out.println("i = " + i);
}
}
temp = i; //这时i为0
i += 1;
i = temp;
像这样的语句在C/C++中是未定义的行为,lz可以搜一下关于序列点的知识看一下,当然了,Java中是没有序列点这个概念的~
右边的i先对左边的i进行赋值运算,运算后再对表达式(右边)中的i进行自加运算!!
输出的是被赋值(左边)的i的那个结果,所以输出的结果为1.
当时他问的问题是:
int a = 5;
a = a--;
System.out.println(a);
为什么还是输出的还是5;
这里让人难想通的地方就是a = a--;中的a了!
我想你可以参考9楼的说法,在结合下面这几个例子去体会一下。也许你会有收获:
int a = 5;
a = a--;
System.out.println(a--);
System.out.println(a--+a);
System.out.println(++a);