我有一个设置了某个值的int变量,当在GUI上单击JButton时,按钮可见性设置为false,并且计数器变量应该减1。一旦它命中0,就执行if语句。问题是计数器变量每次单击按钮时都会重置。这是我的代码
public int someMethod(){
intVar= 3;
return intVar;
}
public void anotherMethod(){
intVar--;
}
public void actionPerformed(ActionEvent e) {
if (someCondition){
clickedButton.setVisible(false);
anotherMethod();
if (someMethod()==0){
//Do something
}
答案 0 :(得分:3)
您的if
将计数器重置为3.因此始终返回someMethod()
。因此,永远不会执行public int someMethod() {
intVar = 3;
return 3;
}
块。
actionPerformed(...)
在逻辑上等同于以下内容:
public void actionPerformed(ActionEvent e) {
if (someCondition){
clickedButton.setVisible(false);
anotherMethod();
if (3==0){
//Do something
}
}
}
因此,您的intVar == 0
在逻辑上等同于以下(同上):
public int anotherMethod(){
return --intVar;
}
public void actionPerformed(ActionEvent e) {
if (someCondition){
clickedButton.setVisible(false);
anotherMethod();
if (intVar==0){
//Do something
}
}
}
如果计数器应该减少,并且someMethod()
只在比较中直接使用intVar时执行if块:
public int someMethod() {
return intVar;
}
或者,从someMethod()
public int anotherMethod(){
return intVar--;
}
public void actionPerformed(ActionEvent e) {
if (someCondition){
clickedButton.setVisible(false);
if (anotherMethod()==0){
//Do something
}
}
}
或者,在此处删除load balancer -> webserver -> database server
调用并从'anotherMethod()'返回更新的计数器值以将代码更改为:
load balancer
答案 1 :(得分:1)
因为在方法someMethod()
中你总是把变量重置为3.只在方法外面实例化变量一次。
另一个有趣的事实(与此无关),来自-127 to +128
的整数存储在整数池(缓存)中,并且对该范围内的值的任何引用都是对池中的对象完成的。 (仅适用于整数而非整数)