Java的。对象实例奇怪地改变了

时间:2014-01-20 19:00:50

标签: java arrays object

class Test {
    static int p;
    Test(int x) {
        p=x;
    }
}

class Mtest
{
    public static void main(String args[])
    {
        Test c[] = new Test [100];
        for(int i=0; i<5; i++) {
            c[i]=new Test(i);
        }

        for (int i=0; i<5;i++) {
            System.out.println(c[i].p);         
        }
}

输出:     4     4     4     4     4

这是什么样的巫术?不应该给我0,1,2,3,4 ??

4 个答案:

答案 0 :(得分:4)

您正在使用静态字段

static int p;

跨类(不是每个实例)共享

如果您需要每个对象,请从声明中删除static

答案 1 :(得分:0)

因为p是静态的,即类的字段,而不是对象的字段。因此p在类test的所有实例之间共享。您应该从字段声明中删除static以达到您的结果预期。

答案 2 :(得分:0)

您将p声明为static。删除它,它应该很好。再加上遵循java准则的代码格式,它使它更具可读性。

答案 3 :(得分:0)

static int p;更改为int p - &gt;您正在使用类变量而不是实例变量。