Java调用ArrayList.add()后列表全被最后一个对象覆盖问题求解
问题根因
你遇到的问题是错误使用static修饰符修饰类成员属性导致的。
static修饰的成员变量属于类全局共享属性,全类所有实例共用同一份内存地址存储该值:每次对静态变量赋值都会覆盖全局的值,所有该类的实例读取该属性时,都会拿到最新的赋值结果。
你的Letter类中的content属性被定义为静态变量,所以每次调用构造方法new Letter(xxx)给content赋值时,所有已经创建的Letter实例的content都会同步变成新赋值的值,自然就出现了添加新对象时整个列表的属性都被覆盖的现象。
修复方案
去掉Letter类中content属性的static修饰符即可,修改后的Letter类代码如下:
public class Letter{ // 去掉static修饰,改为实例私有属性 private char content; private boolean guessed = false; public Letter(char content){ this.content = content; } public char getContent(){ return this.content; } }
修改后每个Letter实例都会持有独立的content属性,赋值不会互相影响,转换方法的运行结果就符合预期了。
内容的提问来源于stack exchange,提问作者random_usr
相关产品推荐
相关产品推荐

