# 強型別 vs. 弱型別 ###### tags: `強型別vs弱型別` ## 強型別 以Java為例,企圖在數字運算過程混進一個字串: ``` int x = 123 + "456"; System.out.println(x); ``` 得到了一個編譯錯誤 ``` HelloWorld.java:4: error: incompatible types: String cannot be converted to int ``` 很明確的告訴你,在 Java 不能用隱喻的方式,企圖直接將字串轉成整數,如果你想實現的是將「數字 123 」和「字串 "456" 轉成的數字」相加,你必須用 Java 能接受的方式明確表明,比如: ``` int x = 123 + Integer.parseInt("456"); System.out.println(x); ``` * 強型別的語言,偏向不容忍隱性的型別轉換。 ## 弱型別 以 PHP 為例: ``` $x = 123 + "456"; echo $x; ``` 執行結果 ``` 579 ``` * 弱型別的語言,這類語言偏向容忍隱性的型別轉換。 ## 總結強型別和弱型別的定義和差別 * 強型別(strongly typed):偏向不容許隱性型別轉換,型別檢查上較為嚴格。 * 弱型別(weakly typed):偏向容許隱性型別轉換,型別檢查上較為寬鬆。 |靜態語言 / 動態語言| 強型別 / 弱型別 | 程式語言 | | -------- | -------- | -------- | | 靜態 | 強 | Java, C# | | 靜態 | 弱 | C/C++ | | 動態 | 強 | Python, Ruby | | 動態 | 弱 | Perl, PHP, JavaScript | ## 靜態語言以及動態語言 * 靜態語言: 能在編譯時期確認與檢查型別,並且在執行的時候不能改變結構 > * 明確定義屬性為顯式類型如:String something = "something" > * 透過類型自動推導的為隱式類型如:var something = "something" * 動態語言: 在執行時確認與檢查型別,也能在執行時改變結構,例如:建立新方法或新屬性。 [動態語言與靜態?直譯與編譯?強型別與弱型別?](https://millenniummeetonce.blogspot.com/2018/04/blog-post_5.html) [上述內容,參考文章](https://ithelp.ithome.com.tw/articles/10202260)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up