今天我嘗試了Java Hotswap,它的工作相當不錯。在我的測試中,我偶然發現了一個相當奇怪的行爲。這是我的代碼:Java JVM HotSwap行爲
public class Test extends JFrame implements ActionListener{
private JButton c;
private int f =1;
/**
* @param args
*/
public static void main(String[] args) {
Test t = new Test();
}
public Test(){
this.setPreferredSize(new Dimension(800, 600));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
c = new JButton("Click");
c.addActionListener(this);
this.add(c);
this.pack();
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
c.setText(String.valueOf(f++));
}
}
注意行c.setText(String.valueOf(f++));
接近結束。如果我在程序運行時將其切換到f--
,我注意到在更改後第一次點擊按鈕時,該值仍在計數。但之後的點擊數正確計數。改回它時也會發生同樣的情況。
我注意到的下一件事是:如果我將代碼更改爲:c.setText(String.valueOf(f+=1));
,請運行JVM並將其熱切換到c.setText(String.valueOf(f-=1));
直接應用更改,而不會發生點擊延遲。
我現在的問題是:究竟是什麼導致了這種行爲? JVM代碼級別上的f++
和f+=1
之間有什麼區別?
可能的重複[優先級的++和 - 運營商在Java](http://stackoverflow.com/questions/6373976/precedence-of-and-operators-in-java)...和運營商在一般。 – 2012-04-10 15:55:56
我認爲這是一個不同的問題,因爲焦點更多的是熱切換JVM的行爲,而不是操作符優先級。 – 2012-04-10 16:01:20