Java预增量和后增量运算符
输出 2. 3. 四, 昨天我的朋友问了这个问题。我对此有点困惑。第1部分将i值打印为2。“增量后”在这里不起作用。但在第二部分中,它是有效的。我能理解第二部分,但我在第一部分中弄错了。它实际上是如何工作的?有人能让我明白吗?第一部分应该打印i=2。这是因为:Java预增量和后增量运算符,java,increment,Java,Increment,输出 2. 3. 四, 昨天我的朋友问了这个问题。我对此有点困惑。第1部分将i值打印为2。“增量后”在这里不起作用。但在第二部分中,它是有效的。我能理解第二部分,但我在第一部分中弄错了。它实际上是如何工作的?有人能让我明白吗?第一部分应该打印i=2。这是因为: public class Sample { public static void main(String[] args) throws Exception { //part 1 int
public class Sample
{
public static void main(String[] args) throws Exception
{
//part 1
int i=1;
i=i++;
i=++i;
i=i++;
System.out.println(i);
//part 2
i=1;
int a=i++;
a=++i;
a=i++;
System.out.println(a+"\n"+i);
}
}
也许理解这一点最简单的方法是引入一些额外的变量。以下是您所拥有的:
public class Sample
{
public static void main(String[] args) throws Exception
{
//part 1
int i=1;
// i++ means i is returned (which is i = 1), then incremented,
// therefore i = 1 because i is incremented to 2, but then reset
// to 1 (i's initial value)
i=i++;
// i is incremented, then returned, therefore i = 2
i=++i;
// again, first i is returned, then incremented, therefore i = 2
// (see first statement)
i=i++;
System.out.println(i);
//part 2
i=1;
// first i is returned then incremented, so i = 2, a = 1
int a=i++;
// i is incremented then returned, so i = 3 and a = 3
a=++i;
// i is first returned, then incremented, so a = 3 and i = 4
a=i++;
System.out.println(a+"\n"+i);
}
}
请注意,在增量之前或之后设置temp变量的顺序不同,这取决于它是增量后i++还是增量前i++。i=i++的工作方式与您期望的工作方式不同,原因是增量后使用它的方式是这样的:
得到i的值
将步骤i中复制的原始文件逐个递增。
将新的i值设置为原始值。
那么我仍然是Java中的i
阅读Java中的and运算符。好的,我想您已经理解了第二部分和第一部分中的混淆
//part 1
int i = 1;
i = i++; // i is still 1 since increment will rest by the assignment.
i = ++i; // i+1=2 (since prefix increment)
i = i++; // i is still 2
System.out.println(i); // out put 2
//part 2
i = 1;
int a = i++; // a is 1
a = ++i; //a=1+2(since i++ now i is 2)=3
a = i++;// a still 3
System.out.println(a + "\n" + i); // now a is 3 is 4(since i++)
检查上面的例子,你可以很容易地理解这里发生了什么
按照你的代码
++i will increment the value of i, and then return the incremented value.
i = 1;
j = ++i;
here -->i is 2, j is 2
i++ will increment the value of i, but return the original value that i held before being incremented.
i = 1;
j = i++;
here -->i is 2, j is 1)
那么i的值就是1
int i=1;
i=i++;
i=++i;
i=i++;
System.out.println(i);
first i=i++;
然后它将增加1,现在我将是2
then next setp i=++i;
然后我的值保持不变,即2!//如果最后一步是i=++i;然后结果将是3找到i=i++的字节码
这里,我们将旧值从堆栈存储到局部变量。还可以在下面的代码中找到注释,以查看所有值更改
2: iload_1 ; load to stack (local = 1, stack = 1)
3: iinc 1, 1; increment local variable (local =2, stack = 1)
6: istore_1 ; store value from stack to local variable (local = 1 )
你是在问java、C++还是C++?@ ValkCalp真心我不完全确定这是问题。问题是用java语言编写的。是吗?@Kumar很可能是因为你的问题涉及到帖子和预增量/减量,这是一个覆盖范围极广的话题,尽管我投了反对票。@Kumar好吧,我很惊讶这没有被标记为重复。通常,如果有人这样想,他们会提出一个基本上代表同一个问题的问题。但在回答你的问题时,是的,你应该尽量避免问那些可以通过相对简单的搜索来回答的问题。你不太可能找到与你的问题完全匹配的答案,但这并不意味着你无法从前面的问题/答案中找出答案。为什么第一条语句中的i++在下一行中没有递增?在语句之后,它肯定会递增到2,但在你的语句中,问题是i=++i;语句i将首先返回,所以i的值将再次为2。您能更详细地解释它在内存中的存储方式以及它是如何处理的吗?我从您的示例中理解了它,并添加了额外的变量。谢谢
next step again i=i++;
2: iload_1 ; load to stack (local = 1, stack = 1)
3: iinc 1, 1; increment local variable (local =2, stack = 1)
6: istore_1 ; store value from stack to local variable (local = 1 )
public static void main(String[] args) throws Exception
{
//part 1
int i=1;
i=i++;// i=1 here i will be assigned with 1. increment will not affect
i=++i;// i=2
i=i++;// i=2
System.out.println(i);
//part 2
i=1;
int a=i++;// a=1, i=2
a=++i;// a=3, i= 3
a=i++;// a=3, i=4
System.out.println(a+"\n"+i);
}