ArrayList在for循环里插入类,为什么都是最后一次插入的数据

这里定义了一个类有这些变量

img

img

运行:

img

这边接收arraylist

img

但是arraylist的数据就有问题了,全是最后一次插入的数据

img

这个问题困扰了很久求解答

**对象在for循环内创建才行。Utils utils=new Utils();放在循环内 **
因为对象是引用数据类型,所以每次循环都需要创建新对象才行。

img

因为你untils只new了一次啊,所以不管插入几次,都指向同一个实例

你每次都要new一个新的,这样,list里才是每个不同的数据,要不然就是反复对同一个对象赋值,把Utils utils = new Utils();放到for循环里面

Utils utils=new Utils();需要方法for循环里面的一开始,每次循环初始化,否则utls的值是循环最后一次的值

img


你把你的utils写到循环外面去了,这样你的arrayList添加的都是同一个,然而因为有循环,每次都会把util的属性值改变,循环到最后属性值就是最后设置的那些了

java特性之一基于对象。从底层来讲你要理解java的存储机制。实际上你在List里添加的数据,并不是把数据添加进去,而是添加了对象的内存地址引用。因此你在循环里面每次修改值,都是对象的值进行修改,但是list引用的地址是不变的。你在循环外生成的对象,在循环内不管怎么样修改值,都是同一个对象,地址引用时一致的。
以上是java很重要的特性