弱类型语言和强类型的语言的区分点,在于 是否支持隐形类型转化
越支持隐式类型转化,越是弱语言类型; 越不支持隐式类型转化,越是强类型。
隐式类型转化: 是指在表达式计算或赋值过程中,系统自动将一个数据类型转换为另一个数据类型,而无需显式地(人为的通过代码实现)指定转换操作。这种类型转换是由编程语言或数据库系统自动执行的,目的是使表达式能够顺利地进行计算或赋值。
隐式类型转换通常发生在不同数据类型之间的运算或赋值操作中
例如在SQL语言中,当一个整数与一个浮点数相加时,系统会自动将整数转换为浮点数,以便进行运算并得到正确的结果;或者对int类型列 输入一个字符串类型,如果系统发现该字符串可以转化成int类型数字,则会将其自动转化成int类型数字
而强类型语言不支持这种隐式类型转化:
如java:
不同类型之间会发生报错,除非进行强制类型转换。
要注意的是:强类型和弱类型并没有严格意义上的定义
像是 C++,允许某些类型的隐式转换的同时却又对类型要求严厉,不能将一个指针随意地转换为一个整数。我们很难定义它究竟是弱类型语言还是强类型语言。
强类型和弱类型的存在只是为了让我们更好的理解语言特性;如强类型语言在类型安全性上有更严格的要求,而弱类型语言在类型安全性上通常更为放松。
很多初学者很容易把这两个概念和弱类型,强类型的概念混淆,其实这是两个完全不同方向上的概念
静态类型语言: 是指在编译时变量的数据类型必须确定的语言,静态类型语言要求在使用变量之前必须声明该变量的数据类型。
动态类型语言: 是在运行时确定数据类型的语言。变量使用之前不需要类型声明,如python中,变量a=1,则a的类型就是整型,若a=”abc”,a的类型就是字符串。
类型名 | 类型特点 |
---|---|
强类型 | 不支持静态类型转化 |
弱类型 | 支持静态类型转化 |
静态类型 | 变量使用前需声明数据类型,程序运行过程中 数据类型不允许改变 |
动态类型 | 变量使用前不需要声明数据类型,程序运行过程中 数据类型可以改变 |
对应的,根据上述类型我们也可以根据类型特点,总结出主流语言的语言特性: