Java中LinkedList添加自定义对象时成员值被覆盖问题求助
解决LinkedList中自定义对象属性被批量覆盖的问题
你遇到的问题根源非常明确——day类里的所有属性都被声明为static(静态)。
在Java中,static修饰的成员属于类本身,而非类的某个实例。不管你创建多少个day对象,所有对象都会共享同一个static属性的内存空间。所以你在循环里给dayx.classment赋值时,本质是在修改同一个类级别的变量,最后一次赋值(i=4)会覆盖之前所有的设置,导致所有对象的classment都显示4。
解决步骤
- 移除
day类中所有属性的static修饰符,将它们转为实例变量,这样每个day对象都会拥有独立的属性副本:
修改后的day类代码:
public class day { Double startingRest = 0.0, currentRest = 0.0; int rownumber = -1, N = 0; String date, title; int classment; public day() { rownumber = -1; N = 0; startingRest = 0.0; currentRest = 0.0; } }
修改后效果
重新运行测试代码,每个day对象的classment都会是各自独立的赋值,输出结果会符合你的预期:
0 1 2 3 4
注意事项
static关键字仅适用于需要被所有类实例共享的成员(比如工具方法、全局常量)。如果是每个对象独有的状态数据,绝对不能添加static修饰。
内容的提问来源于stack exchange,提问作者Smol Cheetah
相关产品推荐
相关产品推荐

