本文收錄了一些java高頻面試知識點
程式導向 VS 物件導向
前者效能比後者高,因類呼叫時需要例項化,開銷比較大耗資源,是故微控制器,嵌入式開發等一般採用程式導向開發。
物件導向有封裝,繼承,多型的特性,可以設計出低耦合,易維護,易複用的系統。
java最終的執行程式碼並不是可以直接被 CPU 執行的二進位制機械碼
過載(overload) vs 重寫(override)
Constructor 不能被 重寫,但是可以過載
區別點 | 過載方法 | 重寫方法 |
---|---|---|
發生範圍 | 同一個類 | 子類 中 |
引數列表 | 必須修改 | 一定不能修改 |
返回型別 | 可修改 | 一定不能修改 |
異常 | 可修改 | 可以減少或刪除,一定不能丟擲新的或者更廣的異常 |
訪問修飾符 | 可修改 | 一定不能做更嚴格的限制(可以降低限制) |
發生階段 | 編譯期 | 執行期 |
String VS StringBuffer VS StringBuilder
String 類中使用 final 關鍵字修飾字元陣列來儲存字串,String 物件是不可變。
StringBuffer 對方法加了同步鎖或者對呼叫的方法加了同步鎖,所以是執行緒安全的。
StringBuilder 並沒有對方法進行加同步鎖,所以是非執行緒安全的。
StringBuilder 與 StringBuffer 都繼承自 AbstractStringBuilder 類
- 操作少量的資料: 適用 String
- 單執行緒操作字串緩衝區下操作大量資料: 適用 StringBuilder
- 多執行緒操作字串緩衝區下操作大量資料: 適用 StringBuffer
構造方法特性
- 名字與類名相同。
- 沒有返回值,但不能用 void 宣告建構函式。
- 生成類的物件時自動執行,無需呼叫。
== vs equals
基本資料型別==比較的是值,引用資料型別==比較的是記憶體地址
== : 它的作用是判斷兩個物件的地址是不是相等
- String 中的 equals 方法是被重寫過,因為 object 的 equals 方法是比較的物件的記憶體地址,而 String 的 equals 方法比較的是物件的值。
- 當建立 String 型別的物件時,虛擬機器會在常量池中查詢有沒有已經存在的值和要建立的值相同的物件,如果有就把它賦給當前引用。如果沒有就在常量池中重新建立一個 String 物件。
hashCode() vs equals()
- 如果兩個物件相等,則 hashcode 一定也是相同的
- 兩個物件相等,對兩個物件分別呼叫 equals 方法都返回 true
- 兩個物件有相同的 hashcode 值,它們也不一定是相等的
- 因此,equals 方法被覆蓋過,則 hashCode 方法也必須被覆蓋
- hashCode() 的預設行為是對堆上的物件產生獨特值。如果沒有重寫 hashCode(),則該 class 的兩個物件無論如何都不會相等(即使這兩個物件指向相同的資料)
本作品採用《CC 協議》,轉載必須註明作者和本文連結