1) 静态类型语言
静态类型指的是在创建份数据(变量、参数、返回值等)时需要显式指明该数据的类型。通常情况下,这些数据的类型旦被定义,在程序的整个生命周期也不再改变。
2) 动态类型语言
动态类型的编程语言在创建数据时往往不需要指明该数据的类型,而且数据的类型也会随着值的改变而改变,给数据赋予不同的值,数据将得到不同的类型。
对于静态类型语言,我们需要预明确地告诉编译器要处理的数据的类型,这样在程序部署之前就能发现代码中的错误或者疏忽。比如我们将个变量定义为整数,将另个变量定义为字符串,如果我们尝试将两个变量相加,那么编译器在编译期间可能就会捕获这种语法错误,并且不会让我们完成程序的构建。
3)强类型语言
强类型语言的典型特征,它们不会处理与类型定义明显矛盾的运算,而是把它标记为个问题,并作为错误抛出。通常人们认为 C/C++、Java、C#、Python、Go 都是强类型语言,它们都不允许上述代码中的行为。
4)弱类型语言
和强类型语言不样,当我们执行些与类型定义不匹配的运算时,弱类型语言尝试提供帮助,它可能会临时转换值的类型,让它当前运算。
正如前面提到的,人们经常混淆静态/动态类型和强/弱类型的概念,倾向于将静态类型等同于强类型,将动态类型等同于弱类型,实际上这是不对的。
强/弱类型指的是编程语言如何处理运算过程中的值。当值的类型不运算规则时,编程语言究竟是做出些猜测,临时转换值的类型以帮助人们解决问题,还是停止运行,提醒人们不应该这样做?