資料類型 關乎記憶體佔用——已發《電腦報》

來源:互聯網
上載者:User

 

求職不怕考

pcw-chendx@vip.sina.com

與編程相關的招聘,都會準備很多考題,一不小心考生就在考題上栽了跟頭,特別是沒有多少工作經驗的應屆畢業生,往往回答得過於理論化,很難令考官滿意。為此,我們特意推出本系列,通過對真實考題的分析讓大家在回答考題時有更多的實用性,讓考官滿意,順利找到工作。

 

資料類型  關乎記憶體佔用

爪哇米工作室 陳躍峰

       資料類型是編程的基礎,它會影響程式對記憶體的佔用情況,如果資料類型使用的不好,會增加記憶體佔用,反之可以減少記憶體佔用。所以,在招聘考試中,一定會有與資料類型相關的題目。

      

招聘題目:編寫一個方法,求byte類型的絕對值。

       答案A:

                     public
byte abs(byte b){

                            if(b
>= 0){

                                   return
b;

                            }else{

                                   return
–b;

                            }

                     }

 

       答案B:

                     public
byte abs(byte b){

                            if(b
>= 0){

                                   return
b;

                            }else{

                                   return
(byte)–b;

                            }

                     }

 

       答案C:

                     public int abs(byte b){

                            if(b
>= 0){

                                   return
b;

                            }else{

                                   return
–b;

                            }

                     }

 

       題目答案:答案是C。

 

為什麼答案是C

       答案A有語法錯誤,對於byte類型的參數b來說,運算式-b是int類型,這不符合聲明中傳回值是byte的約定,所以答案A錯了。在Java文法中,對於byte、short、char類型進行算術運算時,運算結果將自動提升為int類型,不要忽視了這點。

       答案B有邏輯錯誤,byte類型的數值區間是[-128,127],由於正數和負數儲存格式的不同(原碼和補碼格式儲存),所以在求絕對值時, -128的byte類型數值沒有對應絕對值,所以答案B錯了。

       所以,通過這樣一個簡單的題目,考官就可以考察了應聘者對於資料類型運算時的變化的掌握情況,對應聘者基礎知識的紮實程度會有一個直觀的認識。

資料類型在幾乎所有的實際開發中都會用到,不管是開發軟體、還是開發網站程式,用好資料類型,不僅可以使開發人員寫出的代碼比較簡潔,也可以在一定程度上提高程式的執行效率,而代碼的簡潔和執行效率是實際開發過程中最為重要的內容之一

 

實際應用

       資料類型在實際開發中是如何運用的?如何提高執行效率?我們通過一組代碼進行說明。在實際的資料存放區和網路傳輸中,底層的資料處理很多是基於byte數組的,如果需要儲存或傳輸一個int類型的資料,容易想到的方法是利用字串實現來回的轉換。

利用字串轉換雖然比較省事,但是無論是在記憶體使用量還是執行效率上都無法令人滿意,而int類型是由4個byte組成的,利用這個知識可以輕鬆的實現int類型數值和byte數組之間的互轉,提高效率。

代碼1

將int類型轉換為byte數組:

int n = 12345;

       
byte[] b = new byte[4];

       
b[0] = (byte)n;

       
b[1] = (byte)(n >> 8);

       
b[2] = (byte)(n >> 16);

       
b[3] = (byte)(n >> 24);

       點評:該代碼結構清晰,執行效率高,在儲存時將int類型的4個位元組按照從低到高的順序依次儲存到byte數組b中,利用移位和byte類型的強制轉換輕鬆實現int類型中4個位元組的分割。

 

將byte數群組轉換為int類型:

int m = (b[0]
& 0xff) | ((b[1] << 8) & 0xff00) |

((b[2] << 16) & 0xff0000) |((b[3] << 24) &
0xff000000);

       點評:該代碼的結構和難度比上面的轉換要大一些,按照上面的儲存順序,b[0]儲存低八位,所以通過和0xff進行位於運算以後只保留低八位,其他的清零,最後通過位或運算子將4個位元組的內容按照位置進行合并。使用這種方式利用底層的位元運算符提高了代碼的執行效率。

 

代碼2

//將int轉換為byte數組

int n = 12345;

String s =
String.valueOf(n);

byte[] b =
s.getBytes();

//將byte數群組轉換為int

String s1 = new
String(b1);

int m =
Integer.parseInt(s1);

       點評:代碼2雖然在程式碼數上比代碼1少,但是無論是在程式的執行效率還是記憶體使用量上都比代碼1差了很多,每次轉換時都需要產生一個String對象,這樣不但浪費了記憶體,也降低了程式的執行速度。

 

       

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.