Dart语言Primitive Data Types类型归属疑问及官方原生类型查询
Dart 基本类型问题解答
问题1:提到的String/bool/int/float/char是否属于Dart的非基本类型?
首先纠正两个Dart类型的常见误区:Dart没有单独的float浮点类型,所有浮点数统一用double实现;也没有单独的char字符类型,单个字符通常用长度为1的String或Runes处理。
你列出的其余几个类型都不属于非基本类型,Dart官方明确将其归类为基本数据类型(Primitive Data Types),哪怕它们的本质都是继承自Object的对象。
问题2:如何解释和「以对象存储的类型为非基本类型」定义的冲突?
「以对象存储的类型为非基本类型」是Java、C++等传统编程语言的类型划分规则,不适用于Dart的类型体系。
Dart的基本类型虽然是对象,但底层做了大量针对性优化,和普通对象有本质区别:
- 支持字面量直接创建,无需调用构造方法,比如
int age = 18;、bool isPass = true; - 操作效率和传统语言的栈存储基本类型完全一致,没有普通对象的堆分配开销
- 不可变的基本类型值会做常量池复用,相同值的实例会被共享,运行时自动在值语义和引用语义之间切换,开发者无需感知底层实现。
简单来说,Dart的「基本类型」划分标准不绑定「非对象存储」这个前提,是独立的类型体系定义。
问题3:Dart原生基本数据类型完整列表
Dart官方定义的内置基本类型一共有8类:
Numbers:数值类型,包含int(任意精度整数)和double(双精度浮点数)两个子类型Strings:UTF-16编码的字符串,类型标识为StringBooleans:布尔类型,类型标识为bool,仅包含true和false两个合法值Lists:有序可重复集合,也叫数组,类型标识为ListSets:无序不可重复集合,类型标识为SetMaps:键值对集合,类型标识为MapRunes:Unicode码点表示,用于处理emoji等多字节特殊字符Symbols:Dart程序内的运算符或标识符常量表示,日常开发极少直接使用
内容的提问来源于stack exchange,提问作者M Nasir Baloch
相关产品推荐
相关产品推荐

