强类型和弱类型主要是站在变量类型处理的角度进行分类的。
强类型是指不允许隐式变量类型转换,弱类型则允许隐式类型转换。
所以,关键在于变量数据类型的转换。
什么叫隐式类型转换?
隐式是指源码中没有明显的类型转换代码,也就是说,一个变量,你可以直接给他赋值字符串,也可以直接给他赋值数值,你还可以直接让字符串类型的变量和数值类型的变量相加,虽然得出的最终结果未必是你想象的那样,但一定不会报错。
这就是隐式类型转换,弱类型语言,如javascript、php。
Java是强类型语言,不允许隐式类型转换,也就是说,如果你需要拿一个字符串变量当做整型来用,你必须显式地将变量类型转换好。
换句话说:
强类型语言,当你定义一个变量是某个类型,如果不经过代码显式转换(强制转化)过,它就永远都是这个类型,如果把它当做其他类型来用,就会报错
弱类型语言,你想把这个变量当做什么类型来用,就当做什么类型来用,语言的解析器会自动(隐式)转换。
比较
弱类型显然让开发者更省力一些,一些数据类型不是很复杂的场景中基本可以不用关注数据类型的问题,这可以提高开发者的业务处理专注力,提升逻辑开发效率。
但同样,弱类型也因为它的特性,使开发者在开发过程中对变量类型的检测力度不够大,由此提高数据类型方面问题出现的可能性。
另外,弱类型语言的运行效率,内存利用率显然也比不上强类型语言。因为弱类型语言在运行过程中,存在变量类型的隐式转换,多了一些需要执行的操作,并且,分配内存时,会考虑通用而多分配一些,而强类型则专门为各种类型的变量量身定做地分配内存,内存利用率显然比弱类型会高。
选择
对于开发者来说,一般很少会去想,选择什么语言开发,而是去想我学了这门语言,如何找到这门语言的工作。
但其实,语言的选择,是存在的。
比如,你负责一个项目,在做选型的时候,弱类型与强类型的一些优缺点,就是一个需要考虑的因素。
他会让你在成本、阶段、预期之间做出一定的平衡。
作者:o半醒的狐狸