【发布时间】:2016-01-20 21:46:25
【问题描述】:
我有以下 Java 方法:
private int calculate() {
return (bytes[0] & 0xff) + ((bytes[1] & 0xff) << 8);
}
PMD 抱怨此代码违反“UselessParentheses”。
我已经查看了operator precentence rules,但我仍然没有在该代码中看到多余的括号。我错过了什么吗?
【问题讨论】:
-
删除此块中的括号:(bytes[0] & 0xff)
-
至关重要的是,即使有一对多余的括号(我看不到任何括号),如果没有它,代码的可读性也会大大降低。这种写法准确地表达了你的逻辑是什么意思。
-
对不起,我的错误,删除 (bytes[0] & 0xff) 中的括号。或者您可以在此方法中添加 PMD 的抑制警告。
-
@eg04lt3r
+也优先于&,bytes[0] & 0xff + ...等价于bytes[0] & (0xff + ...),而不是(bytes[0] & 0xff) + ...。