我最近读过这个const
关键字,我很困惑!我找不到它和const
关键字之间的任何区别,我的意思是我们可以使用它们来制作一个不可变的变量,还有什么我不知道的吗?
有人可以向我解释如何/何时/为何使用const
关键字,或者它只是"声明一个常量变量的方式"?如果是这样,这有什么区别:
int x = 5;
Run Code Online (Sandbox Code Playgroud)
和
const int x = 5;
Run Code Online (Sandbox Code Playgroud)
你能问我一个例子吗?
检查这两个例子:
static const
课堂内:
class SessionStorage {
static const String _keySessionExist = 'storage.key';
}
Run Code Online (Sandbox Code Playgroud)
只是const
课堂之外:
const String _keySessionExist = 'storage.key';
class SessionStorage {
}
Run Code Online (Sandbox Code Playgroud)
static const
在类内部使用变量或在类外部将其声明为 const 之间有什么区别或含义吗Dart
?在Flutter文档的“编写您的第一个应用程序”教程中,步骤4名为“步骤4:创建无限滚动ListView”,要求您创建2个变量,显示在此处:
class RandomWordsState extends State<RandomWords> {
final _suggestions = <WordPair>[];
final _biggerFont = const TextStyle(fontSize: 18.0);
...
}
Run Code Online (Sandbox Code Playgroud)
为什么const
在第三行使用关键字?我来自C#和JavaScript背景,我不习惯在赋值语句的右侧看到它。我注意到,如果将其删除,它仍然可以按预期工作。您能以拉面语来解释为什么要使用它,什么时候应该这样做?我猜想这太过分了,我不必使用它,但我只是想确定一下。
我不认为这是重复的,因为这篇文章中的答案非常适合解释我的问题,而在另一篇文章中找不到,更不用说另一篇文章是两部分的问题,使用Google时没人会找到。
所以我正在为 Flutter 做第一个示例,在步骤 4:创建无限滚动 ListView下,
我遇到了这段代码:
class RandomWordsState extends State<RandomWords> {
final _suggestions = <WordPair>[];
final _biggerFont = const TextStyle(fontSize: 18.0);
...
}
Run Code Online (Sandbox Code Playgroud)
但我发现下面这行有点诡异。
final _biggerFont = const TextStyle(fontSize: 18.0);
Run Code Online (Sandbox Code Playgroud)
const
我的问题是,将ant 值赋给变量的目的是什么final
?
我知道
编译时常量是规范化的,即无论你写多少次
const MyObj(0, 0)
,你都只创建一个对象。
这听起来可能很有用,但您可以简单地创建 const 变量来保存该值并使用该变量。
嗯,你不觉得这有点多余吗?我知道 Flutter 的开发人员想要创建一个编译时常量对象,但是嘿!您正在将该值分配给一个final
变量。这在某种程度上是同一件事。
有什么想法吗?
更新
我用谷歌搜索了一些定义,我发现
const
构造函数不能有主体,并且它的类不能有任何非最终字段
这就是我们使用关键字的原因吗const
?因为如果您查看该类TextStyle
的设计,您会发现他们在这里做了完全相同的事情。
如文档中所述:
\n\n\n\n\nconst 关键字\xe2\x80\x99t 仅用于声明常量变量。您还可以使用它来创建常量值,以及声明创建常量值的构造函数。任何变量都可以有一个常量值。
\n
有人可以解释一下常量值的使用吗?
\n/sf/answers/3919309621/
\n评论:
\n\n\n“初始化后无法更改”是不明确的。最终变量不能重新分配,但对象可以改变。\xe2\x80\x93\njamesdlin\n2 月 19 日 17:43
\n
\n\n最终变量的值无法更改。最终修改变量
\n
这两种说法是什么意思?请举例说明。
\nvoid main() {
final num = [];
num.add(1);
print(num);
}
Run Code Online (Sandbox Code Playgroud)
输出
1
Run Code Online (Sandbox Code Playgroud)
如果final
变量已初始化,则它无法更改,但为什么它允许我更改值,而不允许我像这样重新分配值num = 5;
?
就像标题所暗示的那样,在Dart中,编译时的static,final和const有什么区别?
它们何时计算,何时为每种类型分配内存?大量使用静态变量会导致性能问题或OOM吗?