4

当我编译以下代码时,我收到了来自编译器的警告,提示“使用了增量值 (bar++) 的值”

int foo = 1, bar = 2;
return foo + bar++; // foo and bar are ints

所以这意味着返回的值将是4,而不是3,这令人惊讶,因为我期待3

它对所有java编译器都是通用的吗?或者只是我使用的(NetBeans)做一些不同的事情?

谢谢

4

2 回答 2

4

那段代码说“ 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
于 2013-02-10T03:52:51.713 回答
0

1) 所有 Java 编译器都会为您的代码生成相同的字节码,结果将是 3。只需测试它。

2) 至于警告,它的意思是return foo + bar++return foo + bar与;相同

于 2013-02-10T03:59:31.227 回答