強型別,弱型別,靜態型別,動態型別的區別

2022-09-22 05:26:42 字數 945 閱讀 3197

型別系統的一些概念,眾說紛紜,使用上也比較亂。有些東西,甚至不好嚴格定義。以下算學術界的一種相對“嚴格”的說法。

首先了解一下基本概念

有了上面的概念,再討論強、弱型別,靜態、動態型別

偏向於不容忍隱式型別轉換,弱型別相對於強型別來說型別檢查更不嚴格,比如說允許變數型別的隱式轉換,允許強制型別轉換等等。強型別語言一般不允許這麼做。

弱型別

> "1"+2

'12'

強型別

>>> "1"+2

traceback (most recent call last):

file "", line 1, in typeerror: cannot concatenate 'str' and 'int' objects

其中靜態型別可以分為兩種:

簡單地說,就是在宣告瞭一個變數之後,不能改變它的型別的語言,是靜態語言;能夠隨時改變它的型別的語言,是動態語言。因為動態語言的特性,一般需要執行時虛擬機器支援。

動態型別

>>> a = 1

>>> type(a)

>>> a = "s"

>>> type(a)

靜態型別

prelude> let a = "123" :: int

:2:9:

couldn't match expected type `int' with actual type `[char]'

in the expression: "123" :: int

in an equation for `a': a = "123" :: int

下面是些例子

附上wiki完整的型別系統對比**: