ArrayList添加元素后全部被最后一个对象覆盖,是否因声明导致?
问题原因与解决方案
嘿,这绝对是你代码里的声明问题导致的——核心问题出在Dish类的字段声明上!你把所有实例相关的字段都标记成了static,这直接导致所有Dish对象共享同一组变量值。
为什么会出现“所有对象被最后一个替换”的现象?
static修饰的变量属于类本身,而不是类的某个具体实例。当你每次调用new Dish(...)创建对象时,都会把传入的参数赋值给这些静态变量,相当于每次都覆盖了之前的值。所以不管你创建多少个Dish对象,它们的catalogNumber、costs等字段其实都指向同一个静态变量,最后自然都会显示最后一次赋值的内容。
修复方案:去掉字段的static修饰符
把Dish类里所有实例相关的字段和方法的static修饰符去掉,让每个对象拥有自己独立的字段值:
public class Dish { // 去掉所有字段的static修饰符 private int catalogNumber; private Double costs; private String nameofDish; private int availabilityOfDish; public Dish(int number, Double price, String name, int availability) { catalogNumber = number; costs = price; nameofDish = name; availabilityOfDish = availability; } // getter方法也去掉static,变成实例方法 public int getCatalogNumber() { return catalogNumber; } public Double getCosts() { return costs; } public String getNameofDish() { return nameofDish; } public int getAvailabilityOfDish() { return availabilityOfDish; } @Override public String toString() { return catalogNumber + " " + costs + " " + nameofDish + " " + availabilityOfDish; } }
修复后效果
修改完成后,你再运行setMenuList()方法,每个Dish对象都会保存自己独有的字段值,列表里的元素就不会再被最后一个对象“替换”了,打印出来的内容会和你预期的一致。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

