程序是这样的
class Tang
{
public static void main(String []args)
{
int i=11,j=0;
i=i++;
System.out.println("i1="+i);
System.out.println("i2="+i);
}
}
结果是i1=11;i2=11;
我认为的结果是i1=12,i2=12;
我是这样理解的,当执行i=i++时,首先把右边的i赋给左边i,然后在执行左边的i++;所以我认为结果是2个都12;
请高手指教一下为什么结果2个都是11呢,
class Tang
{
public static void main(String []args)
{
int i=11,j=0;
i=i++;
System.out.println("i1="+i);
System.out.println("i2="+i);
}
}
结果是i1=11;i2=11;
我认为的结果是i1=12,i2=12;
我是这样理解的,当执行i=i++时,首先把右边的i赋给左边i,然后在执行左边的i++;所以我认为结果是2个都12;
请高手指教一下为什么结果2个都是11呢,
在c里面这种计算结果是不确定的!
但是java中是确定的
i=i++;
这条语句上,仔细看看java基础吧。
i++是在本条语句执行完后,才会去加1的,当给i赋值的时候他仍然是11。
断点调试也不执行这个语句。
可见编译器根本没有编译这句话。
class Tang
{
public static void main(String[] args)
{
int i1=11,j=0;
int i2=i1++;
System.out.println("i1="+i);
System.out.println("i2="+i);
}
}
int x = 1;
x = x++;
Steps:
1 initial value of x is stored in temp register. So temp = 1.
2 x is incremented. x = 2 and temp = 1.
3 the value of the temp register is assigned to the LHS. x = 1
而是将=号右边的"整个表达式"的值赋予=号左边的变量那么回到此题:
i=i++=号的右边:(i++)是一个表达式
因为++是后缀,所以,先得到表达式的值0,
然后在对i变量进行++操作,可是不管i变量如何改变,表达式的值都已经确定了
也就是说,i++这个表达式的值是0,i这个变量的值是1那么,也就很清楚了
i=(i++)
也就相当于:
i=0
的说法很经典,受益匪浅i=i++
也就相当于顺序执行:temp=i++;
i=temp;
class Test{ public static void main(String []args)
{
int a1=1;
int a2=1;
int a3=1;
int a4=1;
int i1=(a1++)+(a1++)+(a1++);
int i2=a2+++a2+++a2++;
int i3=a3+++a4++;
System.out.println("i1="+i1);
System.out.println("i2="+i2);
System.out.println("i3="+i3);
}
}i1,i2,i3分别是多少?
当java执行的时候对于i++是执行先将i的值存储到寄存器,然后将i自动加1,寄存器里面的值用于运算(将寄存器里面的值赋值给i)这样 i=i++ 的结果就是以前的值,不会改变。