1. 程式人生 >實用技巧 >其它 >關於kotlin中當陣列為物件陣列時,使用add新增物件時,操作原物件會使陣列中值改變

關於kotlin中當陣列為物件陣列時,使用add新增物件時,操作原物件會使陣列中值改變


kotlin 再建立物件陣列的時候,add函式把物件加入到陣列中,因為陣列是引用傳遞而不是值傳遞,指向的是同一個記憶體地址 ,所以賦值給數組裡的物件其實一直都是同一個地址裡存的同一個陣列,所以你曹魏原物件,陣列的值也會改變,所以要使用copy()函式,copy函式就是重新建立一個物件,這樣就相互不影響了,例子如下:

//測試類
data class Test(var name: String,var age: Int)
val testList = ArrayList<Test>()
        val testAddList = ArrayList<Test>()
        val testCopyList = ArrayList<Test>()
        testList.add(Test("測試",0))
        testAddList.add(testList[0])
        testCopyList.add(testList[0].copy())
        testList[0].age=999
        Log.d("test","testList資料為${testList}")
        Log.d("test","testAddList資料為${testAddList}")
        Log.d("test","testCopyList資料為${testCopyList}")

關於kotlin中當陣列為物件陣列時,使用add新增物件時,操作原物件會使陣列中值改變