不同的对象数组元素引用同一个对象?

时间:2019-01-14 16:18:39

标签: java

我有一个用于存储不同对象的对象数组。当我尝试从任何一个对象获取数据时,它将给出最后一个对象的数据。我制作了一些新的测试文件,并将所有内容缩减为问题本身。这就是我的意思:

public class Test
{
  public static ObjectTest[] objArray = new ObjectTest[2];

  public static void main(String[] args)
  {
    objArray[0] = new ObjectTest("Jimmy");
    objArray[1] = new ObjectTest("Terry");
    System.out.println(objArray[0].getName());
    System.out.println(objArray[1].getName());
  }
}

这将输出:

Terry
Terry

这里也是ObjectTest.java:

public class ObjectTest
{
  private static String name;

  public ObjectTest(String nm)
  {
    name = nm;
  }

  public static String getName()
  {
    return name;
  }
}

这是什么打印出最后一个对象的名称?这里不应该有2个不同的对象吗?似乎只有1。

2 个答案:

答案 0 :(得分:0)

所有类实例之间共享的静态变量,最后一个值将覆盖您之前设置的所有内容。使用实例变量代替静态变量:

public class Main {
    public static ObjectTest[] objArray = new ObjectTest[2];

    public static void main(String[] args) {
        objArray[0] = new ObjectTest("Jimmy");
        objArray[1] = new ObjectTest("Terry");
        System.out.println(objArray[0].getName());
        System.out.println(objArray[1].getName());
    }
}

class ObjectTest {
    private String name;

    public ObjectTest(String nm) {
        name = nm;
    }

    public String getName() {
        return name;
    }
}

输出:

Jimmy
Terry

答案 1 :(得分:0)

name在这里是一个静态字段,对于类ObjectTest的每个实例来说都是一个静态字段。到处删除static关键字。