1. 程式人生 > >弱型別語言、強型別語言?

弱型別語言、強型別語言?

一、什麼是弱型別語言、強型別語言?

強型別和弱型別主要是站在變數型別處理的角度進行分類的。

強型別是指不允許隱式變數型別轉換,弱型別則允許隱式型別轉換。

所以,關鍵在於變數資料型別的轉換。

 

二、什麼叫隱式型別轉換?

隱式是指原始碼中沒有明顯的型別轉換程式碼,也就是說,一個變數,你可以直接給他賦值字串,也可以直接給他賦值數值,你還可以直接讓字串型別的變數和數值型別的變數相加,雖然得出的最終結果未必是你想象的那樣,但一定不會報錯。

這就是隱式型別轉換,弱型別語言,如javascript、php。

比如  (var result=5+5; //two numbers     alert(result);  //outputs "10"     var result=5+'5'; // a number and a string     alert(result);  //outputs "55")

Java是強型別語言,不允許隱式型別轉換,也就是說,如果你需要拿一個字串變數當做整型來用,你必須顯式地將變數型別轉換好。

比如( int d = 10  double c = 12.3

    int a =a+(int)c  //這裡a的值就是22)

換句話說:

  • 強型別語言,當你定義一個變數是某個型別,如果不經過程式碼顯式轉換(強制轉化)過,它就永遠都是這個型別,如果把它當做其他型別來用,就會報錯
  • 弱型別語言,你想把這個變數當做什麼型別來用,就當做什麼型別來用,語言的解析器會自動(隱式)轉換。

三、比較

弱型別顯然讓開發者更省力一些,一些資料型別不是很複雜的場景中基本可以不用關注資料型別的問題,這可以提高開發者的業務處理專注力,提升邏輯開發效率。

但同樣,弱型別也因為它的特性,使開發者在開發過程中對變數型別的檢測力度不夠大,由此提高資料型別方面問題出現的可能性。

另外,弱型別語言的執行效率,記憶體利用率顯然也比不上強型別語言。因為弱型別語言在執行過程中,存在變數型別的隱式轉換,多了一些需要執行的操作,並且,分配記憶體時,會考慮通用而多分配一些,而強型別則專門為各種型別的變數量身定做地分配記憶體,記憶體利用率顯然比弱型別會高。