0%

强类型语言和弱类型语言

面试中考了一道题,题目如下:
在Python环境中运行

1
2
print(1 + "9")
print("9" + 1)

会出现什么?
一开始很困惑,当我自己去跑一遍之后发现,解释器会报错

1
TypeError: unsupported operand type(s) for +: 'int' and 'str'

我突然才意识到,这里涉及的强类型语言和弱类型语言的区别


强类型语言

  • 强类型语言又称为强类型定义语言,要求所有的变量都有强制定义,之后才能使用,而且一旦声明之后,如果不经过强制转换,那么它就永远是这个数据类型了。
  • 一般也不允许不同类型的不同类型的变量互相进行运算
  • 比如Java,C++,Python就属于强类型语言

弱类型语言

  • 弱类型语言又称弱类型定义语言,与强类型语言相反,允许不同类型的变量进行相互运算
  • 比如在VBScript中,可以将字符串‘12’和整数3进行连接得到字符串‘123’,然后可以把它看成整数123,而不需要显示转换。

强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。

关于动态语言和静态语言

所有的编程语言都是需要先经过编译之后才能供机器使用的

动态语言

  • 动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。
  • Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言

静态语言

  • 静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型。
  • C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。

动态语言易上手,而且无需事先将所有变量都申明好,而静态语言的好处是运行速度会比动态语言快

Python 属于强类型的动态脚本语言

Welcome to my other publishing channels