Dart 中的 int 类型的默认值为 null。null 是 Null 类类型的对象。(根据 Dart 文档)。此外,在 Dart 中,int 派生自 Object 类。因此,
int i = 10;
print(i.runtimeType is Object); // returns true
Run Code Online (Sandbox Code Playgroud)
这让我相信 int 不像其他语言(例如 C#)中那样是值类型,而是引用类型。
如果我是对的,那么 -
int i = 10;
意味着 i 是一个引用变量,保存对 int 对象 10 的引用。
这样对吗?如果没有,如果共享文档中描述的链接,我将不胜感激。直到现在,我一直找不到任何正确的解释,因此我自己得出了这个结论。谢谢。
是的,Dart 的int
类型是“引用类型”。Dart 根本没有值类型,所有值都是一个类的实例,包括整数。(至少在技术上,函数值使得它们的类很难被看到。)
整数是不可变的并假装是规范化的。如果a
andb
是int
值 and a == b
,那么identical(a, b)
保证为真,所以a
andb
看起来它们是同一个对象,但不确定是因为它们真的是同一个对象,还是因为identical
只是作弊和==
整数。
这意味着您可以在很大程度上将其int
视为“值类型”。无论是在赋值或参数传递时复制,还是传递对同一对象的引用,都无法区分。该语言确保了这一点,因为它允许实现做任何更有效的事情。在实践中,一些整数在函数内被拆箱,一些整数作为值存储在引用本身中,一些是真实的对象。(这也是您不能将 anExpando
与 an 一起使用的原因之一int
)。
(在当前的 Dart 语言中,所有类型注释都是可为空的,这意味着您可以分配null
给int x;
。随着即将推出的 Null Safety 功能,这种情况发生了变化。如果您这样编写类型,则它们只能为空,因此int x = 1;
不会接受null
值,但是int? x;
会。而且null
也是一个对象,类的唯一实例Null
。)
Dart 中的一切都是对象,int、double 或 num 可能看起来像关键字,但它们是内置的抽象类。由于它们是抽象类,这意味着它们无法实例化,因此它们不以大写字母开头。
试试这条线,
print('2 is instance of "int" class :\t${ 2 is int}');
这将导致 true。
关于您对 'null' 的担忧:在 Dart 中,就像 JavaScript 和 Python 一样,变量可以保存的所有内容都是一个对象,包括 null。每个对象(包括 null)都是某个类的实例,所有这些类都继承自 Object 类。
您可以参考此链接以获取更多信息。希望这可以帮助。
归档时间: |
|
查看次数: |
1208 次 |
最近记录: |