私は現在、他の誰かの Java コードのバグを修正していますが、そのバグについて説明することはできません。問題のコードは、次の if ステートメントです。
if (locked && DEBUG_ENABLED
&& owner != null
&& (owner.equals(playerName) || subowner.equals(playerName))
&& handleCommand(playerName, message)) {
....
} else {
....
}
これDEBUG_ENABLED
は次のように初期化され、次のようprivate static boolean DEBUG_ENABLED = false;
にhandleCommand
機能します。
public boolean handleCommand(String name, String msg) {
if(msg.equals("Command1")) {
....
} else if(msg.equals("Command2")) {
....
} ....
} else { // No matching command
return false;
}
return true;
}
私を困惑させているのはDEBUG_ENABLED
、 false に設定されていても、コードがまだhandleCommand
関数を呼び出して実行していることです。私はいつも、短絡のためにこれが起こるはずがないと思っていました. 最初のスニペットの else ブロック内のコードのみが実行されるため、if ステートメント自体は依然として false として評価されます。
では、なぜこの if ステートメントはこのように振る舞うのでしょうか? 短絡に失敗していますか、それとも原則を誤解していますか、それともコードのこの部分にまったく別の問題がありますか? subowner
(この部分の外側で行われるnull チェックの欠落に加えて。)