1. 程式人生 > 其它 >【軟工】【軟體工程】【第一版】

【軟工】【軟體工程】【第一版】

1.21 說一說hashCode()和equals()的關係

hashCode用於獲取雜湊值,equal用於確定兩個物件是否相等

  • 如果兩個物件相等,則他們必須擁有相同的雜湊值
  • 兩個物件雜湊值相等,則他們未必相等

1.22 為什麼要重寫hashCode()和equals()?

  • Object類提供的equals()方法預設是用==進行比較,但在實際業務中,通常是要兩個物件內容相同則相同,所以要重寫
  • equal()重寫了,則hashcode()必須重寫。

1.23 ==和equals()有什麼區別?

==運算子:

  • 對於基本資料型別,比較其值大小
  • 對於引用資料型別,則比較兩個物件的記憶體地址

equals():

  • 沒有重寫前預設是==運算子,比較兩個物件的記憶體地址
  • 重寫後通常是比較兩個物件內容,內容相等則相等

1.24 String類有哪些方法?

  • charAt() 獲取指定字元索引
  • indexOf() 獲取索取指定索引字元
  • subString(int beginIndex, int endIndex)獲取指定位置子字串
  • String toUpperCase():將此字串中所有的字元大寫;
  • String toLowerCase():將此字串中所有的字元小寫;

1.25 String可以被繼承嗎?

String類有final修飾,不可被繼承

因為要保證String類不可變,所以用final修飾,如果可以繼承的話就可能存在子類方法修改字串的值,字元常量池就沒有存在的意義了

1.26 說一說String和StringBuffer有什麼區別

  • String是一個不可變型別的類,一旦物件建立好之後,只到物件銷燬其字串序列都不會變
  • StringBuffer是一個字元可變型別,內部有許多操作字串的API,最終可以轉換為String

1.27 說一說StringBuffer和StringBuilder有什麼區別

  • StringBuffer和StringBuilder都是字元可變的
  • StringBuffer和StringBuilder有共同的父類AbstractStringBuilder,常用API差不多
  • StringBuffer是執行緒安全的,StringBuilder是執行緒不安全的
  • 要建立可變字串,建議使用StringBuilder

1.28 使用字串時,new和""推薦使用哪種方式?

  • “hello”會在常量池儲存一個hello的字串,由JVM管理
  • new String(“hello”)的話首先會在常量池儲存,然後再建立一個String物件
  • new方法會多建立一個物件

1.29 說一說你對字串拼接的理解

  • +運算子適合字元直接量的拼接,java會有編譯器優化和完整的字串一樣
  • StringBuilder適合執行緒不安全,字串包含變數,效能較高
  • StringBuffer適合執行緒安全,字元包含變數

1.30 兩個字串相加的底層是如何實現的?

  • 如果是字串直接量相加的話,編譯器會將其優化為一個完整的字串
  • 如果拼接的字串中包含變數,則在編譯時編譯器採用StringBuilder對其進行優化,即自動建立StringBuilder例項並呼叫其append()方法,將這些字串拼接在一起。

1.31 String a = "abc"; ,說一下這個過程會建立什麼,放在哪裡?

  • JVM會使用常量池管理字串,這個過程首先會檢查常量池中存不存在abc,如果存在則直接複用常量池中已有的abc,不存在則將abc放入常量池

1.32 new String("abc") 是去了哪裡,僅僅是在堆裡面嗎?

JVM首先將abc放入字串常量池,然後再在堆記憶體建立一個String物件,物件中的資料引用常量池的直接量

1.33 介面和抽象類有什麼區別?

介面體現的是一種規範,而抽象類體現的是一種模板式設計

  • 介面和抽象類都不能例項化,他們都位於繼承樹的頂端,用於被其他類實現或繼承
  • 介面和抽象類都可以包含抽象方法,其實現類或者子類都必須實現這些抽象方法
  • 一個類最多隻能繼承一個父類,包括抽象類,而一個類可以實現多個介面
  • 接口裡不包含構造器;抽象類裡可以包含構造器。抽象類裡的構造器並不是用於建立物件,而是讓其子類呼叫這些構造器來完成屬於抽象類的初始化操作。

1.34 介面中可以有建構函式嗎?

由於介面定義的是一種規範,因此接口裡不能包含構造器和初始化塊定義。

1.35 談談你對面向介面程式設計的理解

介面體現的是一種規範和實現分離的設計,充分利用介面可以降低程式各模組間的耦合,從而提高程式的擴充套件性和可維護性