dart 学习之 object和dinamic一些细节

我们先来看一段代码

main() {
  Object a = "111";
  print(a.length);   // 错误的

  dynamic b = "111";
  print(b.length);

  String c = "111";
  print(c.length);
}

首先,让我们逐行分析代码:

main() {
  Object a = "111";
  print(a.length);   // 错误的
}

在这个例子中,变量 a 被声明为 Object 类型,并且被赋值为字符串 “111”。然而,由于 Object 类型是Dart中所有对象的基类,它并没有一个名为 length 的属性。因此,当尝试打印 a.length 时,会引发一个错误。

接下来,让我们看看下一个示例:

dynamic b = "111";
print(b.length);

在这个例子中,变量 b 被声明为 dynamic 类型。dynamic 类型在Dart中是一种特殊的类型,它表示变量的类型会在运行时动态确定。在这种情况下,b 被赋值为字符串 “111”,因此编译器会在运行时将 b 的类型推断为 String 类型。由于 String 类型具有 length 属性,所以打印 b.length 会输出字符串的长度,即 3。

最后,让我们看看最后一个示例:

String c = "111";
print(c.length);

在这个例子中,变量 c 被显式声明为 String 类型,并被赋值为字符串 “111”。因为 c 是一个 String 类型的变量,它具有一个名为 length 的属性,该属性返回字符串的长度。因此,打印 c.length 会输出字符串的长度,即 3。

总结一下:

当使用 Object 类型声明变量时,变量可以引用任何类型的对象。但由于 Object 类型没有 length 属性,因此无法直接使用 length 属性。
当使用 dynamic 类型声明变量时,变量的类型会在运行时动态确定。编译器会根据变量的赋值来推断其类型。因此,可以使用 length 属性,但需要注意赋值的类型是否具有该属性。
当使用特定类型(例如 String)声明变量时,可以确保变量具有特定类型的属性和方法。在这种情况下,可以直接使用 length 属性。

你可能感兴趣的:(dart,学习,开发语言,dart)