初始化NaturalNumber数组得到[5,5,5,5]而非[1,2,3,4]的解决办法
问题原因
你的代码中所有数组元素存储的是同一个NaturalNumber对象的引用,循环中调用count.increment()修改的是同一个对象的内部值,循环结束后count的最终值为5,所以读取数组所有元素拿到的都是同一个对象的当前值5,和预期不符。
解决方法
不需要改动count的自增逻辑,只要每次给数组赋值时存入当前count值的独立拷贝即可,修改后代码如下:
NaturalNumber[] array = new NaturalNumber[4]; NaturalNumber count = new NaturalNumber2(1); for (int i = 0; i < array.length; i++) { array[i] = count.newInstance(); count.increment(); }
方案说明
count.newInstance()会生成一个和当前count值完全一致的全新NaturalNumber实例,新实例和原count对象相互独立- 后续count执行自增操作只会修改原对象的值,已经存入数组的拷贝实例不会受影响
- 最终数组输出结果为
[1,2,3,4],符合预期,count的取值逻辑也没有被改动,循环结束后count值仍然为5。
内容的提问来源于stack exchange,提问作者The highlight
相关产品推荐
相关产品推荐

