代码之家  ›  专栏  ›  技术社区  ›  Yugraaj Sandhu

把const作为引用和值有什么区别?

  •  -1
  • Yugraaj Sandhu  · 技术社区  · 2 年前

    我的意思是:“ const list =[1,2,3] var list= const[1,2,3] "

    2 回复  |  直到 2 年前
        1
  •  3
  •   Vladimir Gadzhov    2 年前

    区别在于不变性和列表的声明方式。

    常量列表=[1,2,3] 声明了一个常量列表,这是一个编译时常量,这意味着它的值是在编译时确定的,不能在运行时更改。

    var列表=常量[1,2,3] 声明了一个包含常量列表的变量,但该变量的值稍后可以在代码中更改为其他列表。

    void main() {
      const list1 =[1,2,3];
      var list2 = const[1,2,3];
      
      list1.add(4); // <--error
      list2.add(4); // <--error
      list1 = [5]; // <--error
      list2 = [5];
      list2.add(6);
      print(list2);
    } 
    
        2
  •  0
  •   sahil patel    2 年前

    主要区别在于不变性。

    const list=[1,2,3] 这是创建常量列表,其中列表是可变的。所以,您可以修改它的元素,但不能更改列表引用。

    var列表=常量[1,2,3] 在这种情况下,我们创建变量列表,其中值为常量。在这种情况下,列表和引用都是不可变的。所以我们不能修改列表的元素,也不能分配差异列表。

    const list1 = [1, 2, 3];
    var list2 = const [1, 2, 3];
    
    list1[0] = 5; // This is allowed
    list2[0] = 5; // This give you compilation error
    
        3
  •  0
  •   A-E    2 年前

    这个答案将深入探讨这个问题:

    存储在内存中的每个值都必须有一个指向其在该内存中位置的引用。

    var list = [1,2,3];
    

    list :是一个引用变量,指向一个整数数组,该数组等于 [1,2,3] 存储在存储器中。

    现在来谈谈问题:

    • 将const放在值前面:

    var list= const [1,2,3]

    存储在内存中的值 [1,2,3] 标记为 const ,其中const的意思是:该对象是完全常量(编译时常量),实际上是该对象及其子对象(如果有的话)。

    但引用变量仍然不是常量,它是可变的(可以更改为指向相同类型的任何其他值):

    list[0] = 10; // fail, because it points to a constant value
    list = [5,6]; // pass (just point to another value)
    list = [4]; // pass
    

    你只有一个自由的参考变量,但有一个常数值。

    • 使用const声明引用变量:

    const list = [1,2,3];

    将该引用变量声明为 const 作出以下决定:

    1. 引用变量是完全不可变的
    2. 该引用所指向的值也是完全 不变的

    这意味着禁止任何更改:

    list[0] = 5; // fails
    
    list = [2,5] // fails 
    

    您有一个变量和值的完全不可变项(值不能更改,变量不能引用另一个值)。

    希望它能帮助你。