flutter a=b b改变a也会变
在Flutter中,如果你执行了 a = b 操作,并且 a 和 b 是同一类型的对象,那么这个操作实际上是将 b 的引用赋给了 a。这意味着如果你之后改变了 b 指向的内容,a 也会反映出这种改变,因为它们此时指向的是内存中的同一个对象。
如果你想要 a 保持原有的值,并且 b 的变化不影响 a,你需要进行深拷贝。具体的实现方式依赖于你的数据类型。
例如,如果 a 和 b 都是 List 类型的,你可以使用 List.from 来进行深拷贝:
- var a = [1, 2, 3];
- var b = List.from(a); // 深拷贝
-
- // 之后修改b,a不会改变
- b[0] = 4;
- print(a); // 输出 [1, 2, 3]
- print(b); // 输出 [4, 2, 3]
复制代码 如果 a 和 b 是自定义对象,你需要确保在对象类中实现了深拷贝的逻辑。例如,如果你有一个 Person 类:
- class Person {
- String name;
- int age;
-
- Person(this.name, this.age);
-
- Person copyWith({name, age}) {
- return Person(name ?? this.name, age ?? this.age);
- }
- }
-
- void main() {
- var a = Person(name: 'Alice', age: 30);
- var b = a.copyWith(); // 深拷贝
-
- b.name = 'Bob';
- print(a.name); // 输出 Alice
- print(b.name); // 输出 Bob
- }
复制代码 在这个例子中,copyWith 方法创建了一个新的 Person 对象,并将原对象中的非空属性复制过去,如果调用时未指定则使用原对象的属性值。这样,改变 b 的属性不会影响 a。
坑很多慢慢踩 藏宝库28xin.com原创
|