java - 编译器警告 "Value of increment value (bar++) is used"- 这是否意味着行为发生了变化?

标签 java postfix-operator

当我编译下面的代码时,我收到编译器的警告,说“使用了增量值的值 (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/

相关文章:

java - JPA QueryDSL 按天计数聚合

java - 可以在 headless (headless)Linux环境下截图吗?

java - 调用 request.getReader() 后重置 HttpRequest

java - 后缀自赋值行为是否在 C#/Java 中严格定义?

c++ - 实现 C++ 后缀增量运算符

java - 登录后在类之间使用 session 变量 - 空对象引用

java - 如何使用 ModelMapper 映射对象树

c - 指针算术我不清楚

java - C 和 Java 中的后缀和前缀运算符产生不同的结果

Java:返回语句的其他可能形式