我试图理解静态与动态类型,但我真的很难看到所有东西是如何组合在一起的。
这一切都始于数据类型。据我了解,数据类型是非常抽象的概念,它们存在于编译器中,以便对数据进行分类,以便可以验证对各种类型数据的操作(即试图阻止您将字符串添加到整数),并且为了生成正确的机器代码用于硬件解释值。即说我们有以下内容:
int myInt = 5;
char myChar = '5';
Console.WriteLine(myInt);
Console.WriteLine(myChar);
两者最终都会将 5 写入控制台窗口,但是,由于整数和字符在内存中的表示不同,机器代码解释绑定到变量 的内存位置中的值myInt
,它获取该值并将其显示在控制台窗口,与myChar
. 即使Console.WriteLine()
“做同样的工作”,五个的不同表示需要不同的低级代码。
所以我的问题是:如果数据类型“只存在于编译器中”——即,一旦程序被编译成机器代码,就不知道特定内存单元中的值是什么类型的数据(一切都只是 1s 和0s) - 那么如何在运行时进行任何类型检查呢?运行时肯定没有数据类型的概念吗?那么动态类型肯定与运行时发生的类型检查无关吗?
我的理解哪里出了问题,有人可以就上面给出的论点解释静态和动态类型吗?正在发生的事情的总体情况是什么?
我试图在一篇文章中理解这一点,所以参考书籍或在线资源会很有用:) 谢谢。