我在oracles网站上看到的这段代码中存在问题.有人可以帮我解释一下吗?
Action updateCursorAction = new AbstractAction() {
boolean shouldDraw = false;
public void actionPerformed(ActionEvent e) {
if (shouldDraw = !shouldDraw) { // <----- here is my problem, what's this condition for?
// isn't it always false?
drawCursor();
} else {
eraseCursor();
}
}
};
new Timer(300, updateCursorAction).start();
Run Code Online (Sandbox Code Playgroud)
jjn*_*guy 11
if (shouldDraw = !shouldDraw)
Run Code Online (Sandbox Code Playgroud)
那不是if(shouldDraw != shoundDraw).我认为这让你感到困惑.相反,它会做出否定shouldDraw并检查结果是什么.
因此,该功能是,如果shouldDraw是有史以来false进入这种状态,它会被设置为true,和if块将被执行.如果shouldDraw进入条件为真,它将被否定,并且将执行else块.
这将从根本上切换shouldDraw之间true和false上的每个执行ActionListener,这将使光标闪烁.
if (shouldDraw = !shouldDraw)
Run Code Online (Sandbox Code Playgroud)
可以改写为
shouldDraw = !shouldDraw;
if (shouldDraw)
Run Code Online (Sandbox Code Playgroud)
这是一个C风格的技巧,条件检查中的赋值可以使更优雅的代码,但它可能会让新的程序员感到困惑
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |