import java.io.*;
public class test {
public static void main(String args[]) {
int a=0, b=6, sum;
for(int i=0; i<=2; i++) {
System.out.println(i=i++);
}
}
}
输出:0 | 1 | 2
。但实际上我认为它应该是0 | 2
。请解释为什么我错了?提前谢谢。
答案 0 :(得分:3)
区别在于这行代码:
System.out.println(i=i++);
i ++是一个后增量,意味着它只在语句的其余部分之后执行。
所以,它有点像这样:
System.out.println(
int tempI = i;
i = tempI;
tempI = i + 1;
);
最后,你打印i的值,而之后没有使用tempI的值,所以认为丢失了。
答案 1 :(得分:1)
答案是为上面代码生成的字节代码。它将i的旧值存储到i中。因此i = i ++语句在逻辑上没有影响。
iconst_0
istore_1
goto 11
getstatic java/lang/System/out Ljava/io/PrintStream;
iload_1
iinc 1 1
dup
istore_1
invokevirtual java/io/PrintStream/println(I)V
iinc 1 1
iload_1
iconst_2
if_icmple 4
return
答案 2 :(得分:0)
在您的代码中:
for(int i=0;i<=2;i++)
{
System.out.println(i=i++); //here the value of i is incremented after it is assigned to i.
}
当您执行i=i++
时,i
会在分配后递增。因此,你没有达到预期的效果。
您可以使用预增量运算符并查看差异。
for(int i=0;i<=2;i++)
{
System.out.println(i=++i);
}
以下是一个相关主题,可以帮助您:What is x after “x = x++”?
答案 3 :(得分:0)
即使不使用调试器,也很容易自己测试。
int a=0,b=6, sum;
for(int i=0;i<=2;i++)
{
System.out.println(i=i++);
System.out.println("Value of i:" + i);
}
<强>输出:强>
0
Value of i:0
1
Value of i:1
2
Value of i:2
<强>问题:强>
那么为什么在System.out.println(i=i++);
之后,i
的值不会增加?
答案:这是因为i++
表示后期增量。右侧的i
仅在该行后增加一个。
//Let say i is 0.
i = i++;
i ++表示右手边i
仍然为0,直到它进入下一行。因此,0被分配给左侧的i
。
答案 4 :(得分:0)
如果有效:。
for(int i=0;i<=2;i++)
{
System.out.println(i=++i);
}
因为这不起作用?:
for(int i=0;i<=2;i++)
{
System.out.println(i=i++);
}
显然println
方法中的后增量被区别对待。
答案 5 :(得分:0)
请参阅此片段:
for (int i=0; i<=2;i+=2){
System.out.println("i= "+ i);
}
这应该给你一个简短的方法。
答案 6 :(得分:0)
如果您编写:
,则在C或C ++中是未定义的行为SELECT * FROM table WHERE a IN (0,1)
原因是无法确定评估顺序。因此,如果用C或C ++编写,则无法保证将生成什么。
在 Java 中,从设计中删除了这种歧义。评估顺序如下:
i = i++;