先上結論:
強類型:偏向於不容忍隱式類型轉換。譬如說 Haskell 的 int 就不能變成 double。
弱類型:偏向於容忍隱式類型轉換。譬如說 C/C++ 語言的 int 可以變成 double,指針可以完全繞過類型系統。
弱類型相對於強類型來說類型檢查更不嚴格,比如說允許變量類型的隱式轉換,允許手動(顯式)強制類型轉換等等。強類型語言一般不允許這麼做。
靜態類型:編譯的時候就知道每一個變量的類型,因爲類型錯誤而不能做的事情是語法錯誤。
動態類型:編譯的時候不知道每一個變量的類型,因爲類型錯誤而不能做的事情是運行時錯誤。譬如說你不能對一個數字 a 寫 a[10] 當數組用。
動態類型語言編程時,永遠不用給任何變量指定數據類型。該語言會在第一次賦值給變量時,在內部將數據類型記錄下來。靜態類型語言寫程序時要聲明所有變量的數據類型,相當於使用之前,首先要爲它們分配好內存空間。