3

似乎 java 编译器 (Jdk8) 缺少像 'j = j++;' 这样的赋值警告 这没有任何效果,而是会为“j = ++j;”之类的赋值生成警告 实际上有效果。我附上了一个演示脚本。

请注意,您必须选择适当的标志来报告 java 编译器java 编译器设置中的分配错误

public static void main(String[] args) {
    int j = 0;
    j = ++j; //Compiler warning: The assignment to variable j has no effect
    System.out.println("j="+j); //Prints 1

    int i = 0;
    i = i++; //Compiler warning: 'None'     
    System.out.println("i="+i); //Prints 0
}

这是java编译器的错误吗?

4

1 回答 1

5

但是警告和缺乏警告是正确的:

  • j =部分j = ++j没有效果;j已经有更新的值。所以警告是有道理的。
  • 但是 的i =部分i = i++ 确实有效果:Afteri递增到 1,它被分配了值0 ——右手表达式的结果。因此,“无效”警告不仅不需要,而且是错误的。

对于这种情况,您可能有一个不同警告的论据i,但一般来说,编译器不会进行大量的 linting(检查可能是逻辑错误但不是语言错误的事情)。

我应该注意,OpenJDK 编译器根本不会针对给定的代码发出任何警告。Eclipse 有自己的编译器,并且该编译器确实会发出更多警告,因此......您可能希望向他们提出请求以添加i = i++案例警告,例如“右手表达式中的副作用被赋值否定”或一些这样的。

于 2019-09-27T09:39:24.417 回答