假设我们有一个类:
public class test {
int a=1;
static int b=1;
public int getA()
{
return a;
}
public void incrementA()
{
a++;
}
public void incrementB()
{
b++;
}
public int getB()
{
return b;
}
}
我有一个像这样的主要方法的课程
public class testmain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
test t= new test();
t.incrementA();
test t1= new test();
test t2= new test();
t2.incrementB();
test t3 = new test();
test t4= new test();
t4.incrementB();
System.out.println("t= "+t.getA());
System.out.println("t1= "+t1.getA());
System.out.println("t4= "+t4.getB());
System.out.println("t3= "+t3.getB());
System.out.println("t2= "+t2.getB());
}
}
我需要解释为什么t
和t1
具有不同的a
值,所有t2
,t3
,t4
都有b
的值相同。我知道我已将b
声明为静态,并且所有对象都访问该变量b
的相同地址。为什么当每个对象都有自己的a
时,它不会对变量造成任何问题,现在我的问题是因为所有对象都在内存中看到相同的位置,为什么a
每个对象的值都不同对象
答案 0 :(得分:1)
每个对象都有自己的a样本。所以有与对象一样多的东西
答案 1 :(得分:0)
类(静态)变量值将可访问该类的多个实例,在本例中为t ... t4。
当您使用t.b(或)t4.b(或)test.b(或)使用t..t4的任何方法更改'b'时 - >相同的'b'值将被更新,因为这些值中只存在一个'b'副本。
实例变量特定于该实例。 'a'存在每个实例的副本t ... t4。
阅读此link 了解详情。