day38

1、String 和 StringBuffer 的區別

JAVA 平臺提供了兩個類:String和 StringBuffer,它們可以儲存和操作字符串,即包含多個 字符的字符數據。這個 String 類提供了數值不可改變的字符串。而這個 StringBuffer 類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用 StringBuffer。典型地, 你可以使用 StringBuffers 來動態構造字符數據。另外,String 實現了 equals 方法,new String(“abc”).equals(newString(“abc”)的結果爲true,而StringBuffer沒有實現equals方法, 所以,newStringBuffer(“abc”).equals(newStringBuffer(“abc”)的結果爲false。   接着要舉一個具體的例子來說明,我們要把1到100的所有數字拼起來,組成一個串。StringBuffer sbf = new StringBuffer(); for(int i=0;i<100;i++) {       sbf.append(i); } 上面的代碼效率很高,因爲只創建了一個 StringBuffer對象,而下面的代碼效率很低,因爲 創建了101個對象。String str = new String();  for(inti=0;i<100;i++) {        str = str + i;} 在講兩者區別時,應把循環的次數搞成10000,然後用endTime-beginTime 來比較兩者執 行的時間差異,最後還要講講 StringBuilder與 StringBuffer 的區別。   String 覆蓋了 equals 方法和 hashCode 方法,而 StringBuffer沒有覆蓋 equals 方法和 hashCode 方法,所以,將 StringBuffer對象存儲進 Java集合類中時會出現問題。

 

2、什麼是 java 序列化,如何實現 java 序列化?或者請解釋 Serializable接口 的作用。

  我們有時候將一個 java 對象變成字節流的形式傳出去或者從一個字節流中恢復成一個 java 對象,例如,要將 java 對象存儲到硬盤或者傳送給網絡上的其他計算機,這個過程我們可 以自己寫代碼去把一個 java 對象變成某個格式的字節流再傳輸,但是,jre 本身就提供了這 種支持,我們可以調用 OutputStream 的 writeObject 方法來做,如果要讓 java 幫我們做, 要被傳輸的對象必須實現serializable 接口,這樣,javac 編譯時就會進行特殊處理,編譯 的類纔可以被 writeObject方法操作,這就是所謂的序列化。需要被序列化的類必須實現 Serializable 接口,該接口是一個 mini 接口,其中沒有需要實現的方法, implementsSerializable 只是爲了標註該對象是可被序列化的。     例如,在 web 開發中,如果對象被保存在了 Session 中,tomcat 在重啓時要把 Session 對 象序列化到硬盤,這個對象就必須實現 Serializable 接口。如果對象要經過分佈式系統進行網絡傳輸或通過 rmi 等遠程調用,這就需要在網絡上傳輸對象,被傳輸的對象就必須實現 Serializable 接口。

 

3、垃圾回收的優點和原理。並考慮 2 種回收機制。

Java 語言中一個顯著的特點就是引入了垃圾回收機制,使 c++程序員最頭疼的內存管理的 問題迎刃而解,它使得 Java 程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java 中的對象不再有"作用域"的概念,只有對象的引用纔有"作用域"。垃圾回 收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作爲一個單獨

的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象

進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。 回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章