You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:10:03