为什么最后一个对象在ArrayList中被多次复制?

时间:2015-06-02 06:37:37

标签: java arraylist

我正在尝试将名为 City 的对象添加到ArrayList。这是类

的代码
public class City {

    public static int x;
    public static int y;

    City(){
        Random rand = new Random();
        this.x = rand.nextInt(100)+1;
        this.y = rand.nextInt(100)+1;
    }
}

这是我的主类

的代码
    public static int N = 10;
    public static ArrayList<City> cities = new ArrayList<City>();

    public static void main(String[] args) {        

        for (int i=1; i<N; i++){            
            cities.add(new City());
        }       

        for (City c : cities)
            System.out.print("("+c.x+", "+c.y+")");
    }

}

println的结果始终相同,似乎数组列表仅存储其所有元素中添加的最后一个对象。

例如,我运行程序时得到的结果是:

(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)

为什么我会得到这样的结果?我怎么能修好呢?

提前致谢!

2 个答案:

答案 0 :(得分:13)

您应该将City类的成员更改为非静态:

public int x;
public int y;

静态成员在类的所有实例之间共享,因此所有实例都具有相同的值。

答案 1 :(得分:7)

x中的yCity个变量标记为staticstatic成员在class的所有实例之间共享,因此是全局变量。您需要对代码进行一些更改:

  1. 将城市中xy个变量的声明更改为private int xprivate int y。理想情况下,类的字段不应为public。有关详细说明,请参阅this答案。
  2. getX课程中添加getYCity方法。
  3. main方法中,使用xy访问getXgetY