Java面試經驗之談(三)

  1. 面向對象的特性有哪些?

    1. 繼承:繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類可以從它的基類那裏繼承方法和實例變量, 並且類可以修改或增加新的方法使之更適合特殊的需要。

    2. 封裝:封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。

    3. 多態性:多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行爲共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。

  2. int 和 Integer有什麼區別?

int是Java的原始數據類型,Integer是Java爲int提供的封裝類。

  1. String 和 StringBuffer的區別?

兩個都是可以存儲字符串,String類提供了數值不可改變的字符串,而StringBuffer類可修改。此時,可能會有朋友說:“String類也可以修改的“。沒錯,String類確實可以修改,但String類重新修改後,其實對象已經改變了。我們經常通過哈希值來判定是否同一個對象。詳情見下面:

 

 

public class TestStringANDStringBuffer {
    public static void main(String[] args) {
        // 初始值
        String str = "string";
        // 哈希值
        int strHC1 = str.hashCode();

        System.out.println("String 比對:");
        System.out.println("str初試值:" +str);

        // 修改str內容
        str = "string-xiugaihou";
        // 哈希值
        int strHC2 = str.hashCode();
        System.out.println("str修改後:" + str);
        System.out.println("------對比兩個哈希值是否一樣------");
        System.out.println("strHC1:" + strHC1 +" --- strHC2:" + strHC2);

        // 初始值
        StringBuffer sb = new StringBuffer("stringbuffer");
        // 哈希值
        int sbHC1 = sb.hashCode();

        System.out.println("StringBuffer 比對:");
        System.out.println("sb初試值:" +sb);

        // 修改sb內容
        sb = sb.append("-xiugaihou");
        // 哈希值
        int sbHC2 = sb.hashCode();
        System.out.println("sb修改後:" + sb);
        System.out.println("------對比兩個哈希值是否一樣------");
        System.out.println("sbHC1:" + sbHC1 +" --- sbHC2:" + sbHC2);

    }
}

 

 

 

 

代碼運行後結果爲:
String 比對:
str初試值:string
str修改後:string-xiugaihou
------對比兩個哈希值是否一樣------
strHC1:-891985903 --- strHC2:-1716910841
StringBuffer 比對:
sb初試值:stringbuffer
sb修改後:stringbuffer-xiugaihou
------對比兩個哈希值是否一樣------
sbHC1:1163157884 --- sbHC2:1163157884

 

由運行結果可見,String改變賦值後,哈希值也改變,所以對象已經不是初識那個。而StringBuffer則不會。所以,爲了代碼更加規範,我們一般都會採用StringBuffer來構造動態字符串。

 

 

 


 

只要自己有時間,都儘量寫寫文章,與大家交流分享。

本人公衆號:

CSDN博客地址:https://blog.csdn.net/ispeasant

個人博客地址:http://www.ispeasant.com/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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