Java编译器是否具有“分配无效”警告/错误的错误

mik*_*ike 3 java javac compiler-warnings ecj

似乎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
}
Run Code Online (Sandbox Code Playgroud)

这是Java编译器的错误吗?

T.J*_*der 5

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

  • j =部分j = ++j无效;j已经有更新的值了。因此,警告是有道理的。
  • i =部分i = i++ 确实有效果:后i递增1,它的分配值0 -右侧表达式的结果。因此,不仅没有要求“没有效果”警告,这是错误的。

您可能有一个针对该i情况的不同警告的参数,但通常来说,编译器不会进行大量的检查(检查可能是逻辑错误但不是语言错误的内容)。

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