Dart是值传递还是引用传递

1)在dart中对于基础数据类型String、int、bool、double是值传递也就是说给传入函数内的形参赋值不会改变外部变量的入参的值
2)而对象List、Set、Map、class是引用传递
我们每次调用函数,传递过去的对象都是对象的内存地址,而不是这个对象的复制。
参数是把内存地址传过去了,如果对这个内存地址上的对象修改,那么其他位置的引用该内存地址的变量值也会修改。

例一:
以上例子中,传入全局变量element.photoInfoModelList,在yzCallbackWithPhotoList回调函数中给传入的photoInfoModelList赋值,不会改变全局变量element.photoInfoModelList的值;

因为submitPhoto中使用的局部变量photoInfoModelList的内存地址已经发生改变,此时指向的是list的内存地址

例二:
以上_goodItemCard接收的是一个model,在使用时传入了全局变量ctr.list[i],在_goodItemCard内对model类属性value和valueName进行赋值操作同步改变了ctr.list[i]中的value和valueName的值,因为此时传入的model的内存地址没有发生改变。

看了上面的例子可能会反驳,第一个例子为什么就不能改变外部变量,这不是不对吗?

实际上,还是这句话“dart是引用传递”

后续修改都是0x0002222内存的修改

总结:这是一个易忽视的坑,一般我们在传递某个全局model的属性给别的方法调用时,会在这个方法中对该数据进行处理,一定想要清楚是否需要在全局对数据进行修改来决定是传入基础类型还是对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容