似乎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 = ++j
的j =
部分没有效果;j
已经包含更新的值。所以警告是有道理的。- 但是
i = i++
的i =
部分确实有效果:i
增加到 1 后,它被分配值0
— 右侧表达式的结果。因此,"没有效果"的警告不仅不需要,而且是错误的。
对于i
情况,您可能会提出不同的警告,但一般来说,编译器不会执行大量的 linting(检查可能是逻辑错误但不是语言错误的内容(。
我应该注意,OpenJDK编译器根本不会对给定的代码发出任何警告。Eclipse 有自己的编译器,并且该编译器确实会发出更多警告,所以......您可能希望向他们提出请求,为i = i++
情况添加警告,例如"右侧表达中的副作用被分配否定"或类似的东西。