我今天尝试了 Javas 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