如果在声明时初始化,为什么我们不能更改变量值?

Why can we not change the variable value if initialises at the time of declaration?

我正在学习 dart,dart 的这种行为让我很烦

var a=10;
a="John";    //it generates an error, because a has integer data-type and we can't assign 
             //string or the value of any other data type because we have assigned an 
             //integer value

但同时,dart 允许我们写

var a;
a=10;
a="John";
print (a)     //it displays John

这意味着当变量在声明时初始化时我们不能赋值任何其他数据类型的值但是如果变量在一行中声明并在初始化时我们可以赋值任何其他数据类型的值第二行。为什么 dart 会这样工作?

var 关键字用于让 Dart 根据您用于初始化变量的值自动为变量分配类型。

如果您在不提供任何初始值的情况下使用 var,您的变量类型将自动分配给 dynamic,这允许将任何类型的对象分配给变量。但这也意味着您的程序的类型安全性要低得多,因为分析器无法再帮助您确定变量的类型 return 以及设置变量时允许的类型。

因此,在您的第一个示例中,a 被分配了 int 类型,因为您提供了 10 作为初始值。因此,当您尝试将 String 设置为 int 变量的新值时,这是一个编译错误。

在您的第二个示例中,a 将变为 dynamic,因为您没有提供任何初始值。所以先给它 10 然后再给它 'John' 不是问题,因为 dynamic 允许我们使用任何类型。但这也意味着当我们尝试在我们的程序中使用 a 时,Dart 无法保证您将获得什么类型的对象,因此将首先在运行时识别错误。

那是因为var意味着dart会自己分配变量的类型。

在第一种情况下,dart 将变量 a 分配为 int 类型,因为它在初始化期间被赋予了一个值。

但在第二种情况下,dart 将变量 a 分配为 dynamic,这就是为什么您稍后可以将其分配为字符串或整数。