Java 在不使用static关键字的情况下递增变量
在这里,我使用static关键字来实例化一个变量,并使用两个不同的对象调用该变量。我想在不使用static关键字的情况下将结果打印为1和2。提前感谢Java 在不使用static关键字的情况下递增变量,java,static,Java,Static,在这里,我使用static关键字来实例化一个变量,并使用两个不同的对象调用该变量。我想在不使用static关键字的情况下将结果打印为1和2。提前感谢 public class Test { static int a = 1; public void meth() { System.out.println(a); a = a + 1; } public static void main(String[] args) {
public class Test {
static int a = 1;
public void meth() {
System.out.println(a);
a = a + 1;
}
public static void main(String[] args) {
Test a = new Test();
Test b = new Test();
a.meth(); //prints 1
b.meth(); //prints 2
}
}
如果删除
static
关键字,则需要在Test
的两个实例中共享int
变量
例如,使用AtomicInteger
作为int
的可变包装器,并在构造Test
时提供对象:
public class Test {
private final AtomicInteger a;
// + constructor setting a + getter
public void increment() {
a.incrementAndGet();
}
}
public class Main {
public static void main(String[] args) {
AtomicInteger i = new AtomicInteger()
Test a = new Test(i);
Test b = new Test(i);
System.out.println(i.get()); // prints 0
a.increment();
System.out.println(i.get()); // prints 1
b.increment();
System.out.println(i.get()); // prints 2
}
}
分配问题?当您删除静态关键字时,
Test
的两个实例中不再共享a的值。因此,您的输出将是1
,因为每个实例都有自己的计数变量。a
在所有实例之间共享。如果删除static
,它将与每个实例相关联。创建一个实例并调用meth
两次-第一次调用将打印1,第二次调用将打印2。