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

2021-08-21 02:28:07 字數 1639 閱讀 3677

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

首先了解一下基本概念

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

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

弱型別>"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)

<type'int'>

>>> a ="s"

>>>type(a)

<type'str'>

靜態型別

prelude>leta ="123":: int

:2:9:

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

in the expression:"123":: int

in an equationfor`a': a ="123":: int

下面是些例子

強型別與弱型別,靜態型別和動態型別

首先強弱是相對的。強型別 每個變數和物件都必須宣告型別,在編譯時確定好型別了,執行時不能更改。偏向於不容忍隱式型別轉換。譬如說haskell的int就不能變成double。弱型別 編譯時不確定型別,執行時根據語義確定是哪種型別。通俗地說,弱型別偏向於容忍隱式轉換,把不同型別的變數放在一起運算。靜態型...

弱型別 強型別 動態 靜態語言的區別

舉個例子 var a 5 var b 5 sumresult a b minresult a b 輸入sumresult的答案不是10,而是55,再次是將a的型別轉化為了字串,然後進行拼接。輸入minresult的答案是0,是將b的型別轉化為了數字,然後進行減法。強型別語言和弱型別語言區別 無論是強...

C語言中強型別 弱型別

強型別 以初始化的全域性資料 弱型別 未初始化的全域性資料 main.c includeshort x 10 short y 10 void func int main test.c int x void func 上邊列印出的結果為x 20,y 0。為什麼呢?乙個工程中有多個檔案,編譯時分開編譯。...