Dart中的动态类型是否较慢?

The*_*mer 2 variables types dynamic dart

我一直想知道Dart中的动态类型是否更慢.

给出的例子:

final dynamic example = "Example"
Run Code Online (Sandbox Code Playgroud)

final String example = "Example"
Run Code Online (Sandbox Code Playgroud)

lrn*_*lrn 6

是的,dynamic在Dart中使用类型变量通常比使用实际类型键入的变量慢.

但是,您的示例不使用dynamic类型,它使用类型推断来推断String类型.这可能会在编译时花费一些额外的费用,但在运行时,您的两个代码示例完全相同.两个变量都输入为String.

一个dynamic方法调用可能会比较慢,因为在运行时系统必须添加额外的检查,以确保该变量可以做你试图用它做的事情.如果你有int x = 2; print(x + 3);运行时系统知道int有一个+操作员,甚至知道它是什么.如果你编写dynamic x = 2; print(x + 3);,运行时系统必须首先检查是否x有一个+运算符才能调用它,并在调用之前在对象上找到该运算符的定义.它可能并不总是较慢,有些情况比其他情况更好地优化,但它永远不会更快.并非所有代码都是性能敏感的,并非所有变量都可以输入.如果你有一个包含a String或a 的变量List,并且你想知道它的长度,那么只需写入stringOrList.length就可以了stringOrList is String ? stringOrList.length : (stringOrList as List).length.它可能会更慢,具体取决于编译器和目标平台.