似乎Java编译器(Jdk8)缺少类似'j = j ++;'的分配的警告。无效,但会为“ j = ++ j;”等赋值生成警告确实有效。我已附上一个脚本进行演示。
请注意,您必须选择适当的标志来报告Java编译器java compiler settings内的分配错误
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编译器的错误吗?
答案 0 :(得分:5)
但是警告和缺乏警告是正确的:
res
的{{1}}部分无效; j =
已包含更新后的值。因此,警告很有意义。j = ++j
的{{1}}部分确实有作用:j
增至1后,便为其分配了值i =
。右手表达的结果。因此,不仅不要求发出“没有效果”警告,这是错误的。对于i = i++
情况,您可能有一个不同警告的参数,但是通常,编译器不会进行大量的检查(检查可能是逻辑错误但不是错误的内容) 语言错误)。
我应该注意,对于给定的代码,OpenJDK编译器根本不会发出任何警告。 Eclipse拥有自己的编译器,并且该编译器还会执行更多警告,因此...您可能希望向他们提出请求,以针对i
情况添加警告,例如“右侧表达式中的副作用”。被分配否定”或类似的东西。