为什么最后一个对象会在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; } } 

这是我的Main类的代码

  public static int N = 10; public static ArrayList cities = new ArrayList(); 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) 

为什么我得到那个结果? 我怎么能修好?

提前致谢!

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

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

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

 public int x; public int y; 

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