Android 列表和复制的可变列表之间的差异
我将列表类型变量复制为可变列表类型的新变量 然后更新新项目的值 但原始变量也被更新了 这些都指向同一个地址吗 为什么?Android 列表和复制的可变列表之间的差异,android,kotlin,Android,Kotlin,我将列表类型变量复制为可变列表类型的新变量 然后更新新项目的值 但原始变量也被更新了 这些都指向同一个地址吗 为什么? var foodList=listOf( 食品模型(“咖喱”,2000年) 食品模型(“大米”,1000) ) //将foodList复制到新变量MutableList类型 val templast=foodList作为可变列表 Log.e(“怪异”,圣殿骑士[position]。名称+“”+tempList[position]。价格) Log.e(“怪异”,食物列表[posi
var foodList=listOf(
食品模型(“咖喱”,2000年)
食品模型(“大米”,1000)
)
//将foodList复制到新变量MutableList类型
val templast=foodList作为可变列表
Log.e(“怪异”,圣殿骑士[position]。名称+“”+tempList[position]。价格)
Log.e(“怪异”,食物列表[position]。名称+“”+foodList[position]。价格)
//E/怪异:大米1000
//E/怪异:大米1000
tempList[position]=FoodModel(nameEdit.text.toString(),priceEdit.text.toString().toInt())
Log.e(“怪异”,圣殿骑士[position]。名称+“”+tempList[position]。价格)
Log.e(“怪异”,食物列表[position]。名称+“”+foodList[position]。价格)
//E/怪异:大米3333
//E/怪异:大米3333
FoodModel是引用类型,因此您的foodList
是一个引用列表。复制时,会得到一个新列表,其中包含对模型的旧引用,因此,在修改新列表中的引用值时,它会反映到以前的列表中
您可以通过创建列表的深度副本来解决此问题。例如:
数据类FoodModel(val str:String,val int:int)
mapTo(mutableListOf(),FoodModel::copy)
这些都指向同一个地址吗
是的,因为foodList as MutableList
没有复制,它是类型转换,可能导致ClassCastException
或不支持操作异常。要复制列表,请使用toMutableList()
由于
是类型转换,因此在这种情况下不需要深度复制
var foodList = listOf(
FoodModel("curry", 2000)
FoodModel("rice", 1000)
)
// copyed foodList to new variable MutableList<FoodModel> type
val tempList = foodList as MutableList<FoodModel>
Log.e("weird", tempList[position].name+" "+tempList[position].price)
Log.e("weird", foodList[position].name+" "+foodList[position].price)
//E/weird: rice 1000
//E/weird: rice 1000
tempList[position] = FoodModel(nameEdit.text.toString(), priceEdit.text.toString().toInt())
Log.e("weird", tempList[position].name+" "+tempList[position].price)
Log.e("weird", foodList[position].name+" "+foodList[position].price)
//E/weird: rice 3333
//E/weird: rice 3333
val tempList = foodList.toMutableList()