当我编译下面的代码时,我收到编译器的警告,说“使用了增量值的值 (bar++)”
int foo = 1, bar = 2;
return foo + bar++; // foo and bar are ints
所以这意味着返回的值将是 4
,而不是 3
,这很令人惊讶,因为我期待的是 3
它是否对所有 java 编译器都通用?或者只是我使用的那个 (NetBeans) 做了一些不同的事情?
谢谢
最佳答案
那段代码说“return foo + bar
”然后是“increment bar
”。所以,"foo + bar
"是 3
,然后 bar 递增,但是函数已经返回所以没用。
variable++
用于后递增,意思是“在这个表达式中使用完变量后递增它。”
如果您希望变量在使用前递增,请使用预递增运算符,++variable
。
据我所知,所有实现前/后递增运算符的语言都是这样做的(尽管有些语言在处理更复杂的表达式方面存在一些歧义)。
% cat Test.java
public class Test {
public static void main(String[] args) {
System.out.println("The result is: " + runTest() + "\n");
}
public static int runTest() {
int foo = 1, bar = 2;
return foo + bar++;
}
}
% javac Test.java
% java Test
The result is: 3
关于java - 编译器警告 "Value of increment value (bar++) is used"- 这是否意味着行为发生了变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794523/