美文网首页Flutter
1. final 和 const(转)

1. final 和 const(转)

作者: JohnSnow_b20c | 来源:发表于2020-07-18 17:36 被阅读0次

转自Konie Shadow

如果你从不打算改变一个变量,请使用 finalconst,而不是 var 或者一个类型名。Final 变量只可以被设置一次;而 const 变量是编译期常量。(Const 变量是隐式 final 的。)一个 final 的顶级变量或者类变量在首次被使用时初始化。

说明:实例变量只可以是 final 的,不可以是 const 的。Final 实例变量必须在构造函数体开始前被初始化——在变量声明时、通过构造函数参数或者在构造函数的 初始化列表 中。

这里是创建并设置一个 final 变量的例子:

final name = 'Bob'; // 没有类型声明
final String nickname = 'Boddy';

你不可以改变一个 final 变量的值:

name = 'Alice'; // 错误:一个 final 变量只可以被设置一次

对那些你想要作为编译期常量的变量使用 const。如果这个 const 变量是类级别的,使用 static const 标识它。在你声明的时候,设置变量的值为编译期常量比如数字、字符串字面量、另一个常量或者常量数值的算术运算结果。

const bar = 1000000; // 压力单位(达因/cm2)
const double atm = 1.01325 * bar; // 标准大气压

Const 关键词不仅可以声明常量。你还可以使用它创建常量值,也可以声明创建常量值的构造函数。任何变量都可以拥有一个常量值。

var foo = const [];
final bar = const [];
const baz = []; // 等同于 `const []`

你可以忽略常量声明中初始化表达式中的 const,像上面的 baz 一样。详情请参阅 不要重复使用 const

你可以改变一个非 final 且非 const 变量的值,即使它有一个常量值。

foo = [1, 2, 3]; // 之前是 const []

你不可以改变一个常量的值:

baz = [42]; // 错误:常量不可以被赋值

编译时常量 && 运行时常量

编译时常量,就是它的值在编译时就能确定的常量,不是等到运行时才确定。
运行时常量,就是在它的值在程序运行时才能确定。
const是编译时常量,final就是运行时常量。
const修饰的常量必须在声明时初始化,并且是可以确定的值,不是需要经过计算的值。
final修饰的常量必须在声明进初始化或者在构造函数中初始化,它的值可以动态计算。
共同点是两者赋值后就不能再修改(不能重新赋值,对于引用类型可以修改属性)。

看一个Dart的常量实例:

main() {
  const test1="hello";//正确,编译期常量
  final test2="hello";//正确,运行时常量

  const test3=DateTime.now();//编译报错,值不是编译期常量
  final test4=DateTime.now();//正确,运行时常量

  const test5=new List();//编译报错,值不是编译期常量
  final test6=new List();//正确,运行时常量
}

相关文章

  • 1. final 和 const(转)

    转自Konie Shadow 如果你从不打算改变一个变量,请使用 final 和 const,而不是 var 或者...

  • Flutter第3天-Dart语言

    1.const 和 final区别1.圆的周长 const PI = 3.141592654; //const:编...

  • 二、Dart

    1、dynamic 动态2、final 最终的 const 常量 var变量final和const的区别...

  • dart注意点记录

    const 和final : const变量是编译时常量(const变量隐式为final变量),它在编译过程中初始...

  • final 和 const

    const 具有传递性,当一个对象被定义为const时,它的子元素也不能修改。比如数组。final没有传递性。co...

  • flutter 基础二

    1.const与final的区别 const初始化的时候必须要赋值,final可以不赋值 const与final初...

  • Dart语法基础

    1.特殊运算符 ??= ?? ..(级联运算符),类似链式调用 2.final和const的区别 const必须赋...

  • Dart学习笔记——基础

    1、定义常量 Dart 常量:final 和 const修饰符 const值不变 一开始就得赋值。 final 可...

  • Dart 基本语法

    Final以及Const 在 Dart 中使用 final 以及 const 关键字来申明常量。使用 const ...

  • Dart - 类型声明(final和const)

    如果你不想更改变量的值,那么你可以用 final 和 const: 需要注意的点 使用 final 和 const...

网友评论

    本文标题:1. final 和 const(转)

    本文链接:https://www.haomeiwen.com/subject/syjfkktx.html