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编译器的错误吗?
但是警告和缺乏警告是正确的:
j =部分j = ++j无效;j已经有更新的值了。因此,警告是有道理的。i =部分i = i++ 确实有效果:后i递增1,它的分配值0 -右侧表达式的结果。因此,不仅没有要求“没有效果”警告,这是错误的。您可能有一个针对该i情况的不同警告的参数,但通常来说,编译器不会进行大量的检查(检查可能是逻辑错误但不是语言错误的内容)。
我应该注意,对于给定的代码,OpenJDK编译器根本不会发出任何警告。Eclipse拥有自己的编译器,并且该编译器会执行更多警告,因此...您可能希望向他们提出请求以添加针对这种i = i++情况的警告,例如“右手表达式中的副作用被赋值否定”或类似的东西。