当前位置: 首页 > 知识库问答 >
问题:

Dart中的“const”和“final”关键字有什么区别?

艾国安
2023-03-14

Dart中的constfinal关键字有什么区别?

共有1个答案

孟宏才
2023-03-14

在Dart的网站上有一个帖子,它解释得很好。

最后:

“final”表示单赋值:final变量或字段必须有初始值设定项。一旦赋值,就不能更改最终变量的值。final修改变量。

它们必须从可以在编译时计算的数据中创建。const对象不能访问运行时需要计算的任何内容。1+2是有效的常量表达式,但new datetime.now()不是。

它们是深刻的、传递性的不可变的。如果有一个包含集合的final字段,则该集合仍然可以是可变的。如果您有一个const集合,那么它中的所有内容也必须是const的,递归的。

它们被规范化了。这有点像string interning:对于任何给定的常量值,无论计算多少次常量表达式,都将创建并重用单个常量对象。

const:
如果您的值是在运行时计算的(例如new datetime.now()),则不能对其使用const。但是,如果在编译时已知该值(const a=1;),则应在final上使用constconstfinal之间还有另外两个很大的区别。首先,如果使用const,则必须将其声明为static const,而不仅仅是const。其次,如果您有一个const集合,那么该集合中的所有内容都在const中。如果您有一个final集合,则该集合中的所有内容都不是final

final:
final应该用于const,如果您在编译时不知道该值,它将在运行时被计算/抓取。如果您想要一个不能更改的HTTP响应,如果您想从数据库中获取某些内容,或者如果您想从本地文件中读取,请使用final。编译时不知道的任何内容都应该在final之上const

尽管如此,constfinal都不能重新分配,但是final对象中的字段,只要不是constfinal本身,就可以重新分配(与const)。

 类似资料:
  • 问题内容: 在学习电子时,我发现了两种获取BrowserWindow对象的方法。 和 和之间有什么区别? 我不明白为什么可以使用。我是否想念有关JS的重要信息? 问题答案: 这两段代码是等效的,但是第一段代码使用的ES6分解分配要短一些。 这是一个如何工作的简单示例:

  • 本文向大家介绍浅谈Java中的final关键字与C#中的const, readonly关键字,包括了浅谈Java中的final关键字与C#中的const, readonly关键字的使用技巧和注意事项,需要的朋友参考一下 在编程语言中都有某种方式,告知编译器一块数据是恒定不变的。有两个需求 1. 一个永不改变的编译器常量 2. 一个在运行时被初始化的值,而这个值不会被改变 在Java中,使用fina

  • 问题内容: 什么是Java中的以下关键字的区别:,? 问题答案: an 是a的行为的抽象规范,而a 是此类规范的具体实现。 因此,当您撰写本文时,是在说您已经在实现的实现中满足了一些抽象规范。 意味着您可以采用实现()或规范(),并使用其他功能或新功能对其进行添加(或更改其行为的规范),从而修改其行为并对其进行_扩展_ 。

  • 我最近读到了关键字,我很困惑!我找不到和关键字之间的任何区别,我的意思是我们可以使用它们来创建一个不可变的变量,还有什么我遗漏的吗?

  • 和之间有什么区别? 什么时候我只能使用其中一个

  • 我正在学习颤振(主要来自Youtube) 为什么我们需要在赋值运算符后面使用关键字,因为我们已经将其设置为