当我编译以下代码时,我收到了来自编译器的警告,提示“使用了增量值 (bar++) 的值”
int foo = 1, bar = 2;
return foo + bar++; // foo and bar are ints
所以这意味着返回的值将是4
,而不是3
,这令人惊讶,因为我期待3
它对所有java编译器都是通用的吗?或者只是我使用的(NetBeans)做一些不同的事情?
谢谢
当我编译以下代码时,我收到了来自编译器的警告,提示“使用了增量值 (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
1) 所有 Java 编译器都会为您的代码生成相同的字节码,结果将是 3。只需测试它。
2) 至于警告,它的意思是return foo + bar++
;return foo + bar
与;相同