Java ArrayList存入对象后读取仅返回最后一个值问题咨询
问题根源
你全程仅实例化了1个SubCategory对象,Java中ArrayList的add()方法存入的是对象的引用(即内存地址),而非对象的独立副本。你每次修改temp的属性时,改动的都是堆内存中唯一的那一个SubCategory实例,列表中所有指向该实例的引用读取到的内容自然会同步更新,最终所有元素都显示最后一次修改后的属性值。
修复方案
每次往列表添加元素前,单独创建新的SubCategory实例即可:
ArrayList <SubCategory> list = new ArrayList<>(); // 第一次新增创建新对象 SubCategory temp = new SubCategory(); temp.setId(SF_DIRECT); temp.setName(R.string.spell_subcategory_direct); list.add(temp); // 第二次新增重新实例化 temp = new SubCategory(); temp.setId(SF_INDIRECT); temp.setName(R.string.spell_subcategory_indirect); list.add(temp); // 第三次新增重新实例化 temp = new SubCategory(); temp.setId(SF_ELEMENTAL); temp.setName(R.string.spell_subcategory_elemental); list.add(temp);
内容的提问来源于stack exchange,提问作者Lazale
相关产品推荐
相关产品推荐

