Java 编译器是否有带有"assignment has no effect"警告/错误的错误



似乎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编译器的错误吗?

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

  • j = ++jj =部分没有效果;j已经包含更新的值。所以警告是有道理的。
  • 但是i = i++i =部分确实有效果:i增加到 1 后,它被分配值0 — 右侧表达式的结果。因此,"没有效果"的警告不仅不需要,而且是错误的。

对于i情况,您可能会提出不同的警告,但一般来说,编译器不会执行大量的 linting(检查可能是逻辑错误但不是语言错误的内容(。

我应该注意,OpenJDK编译器根本不会对给定的代码发出任何警告。Eclipse 有自己的编译器,并且该编译器确实会发出更多警告,所以......您可能希望向他们提出请求,为i = i++情况添加警告,例如"右侧表达中的副作用被分配否定"或类似的东西。

相关内容

最新更新