自用java面試寶典(無水題)-歡迎指導糾錯-day06
20. 你知道java中有多少個包裝類嗎?為什麼要引入包裝類?他們和基本資料型別的區別?
Java有十種包裝類,常用的有八種,分別對應八種基本型別,分別是:
Integer 、Long、Short、Byte、Character、Double、Float、Boolean
另外兩個應用於高精度的運算,沒有對應的基本型別,不常用。
引入包裝類的原因:
① java是純面向物件的語言,一切皆物件,但八大基本型別卻不是物件
② 包裝類在滿足基本型別功能的基礎上,能根據具體應用場景更加靈活的控制資料範圍
比如:一個學生類中有成績屬性,如果有一名學生缺考,要把他的成績屬性置為null,顯然基本型別是做不到的。
包裝類和基本型別的區別:
① 宣告方式不同,基本型別無需通過new關鍵字來建立,而封裝類需要
② 儲存方式及位置不同,基本型別是直接儲存變數的值儲存在棧中能高效的存取,封裝類需要通過引用指向例項,具體的例項儲存在堆中
③ 初始值不同,封裝型別的初始值為null,基本型別的初始值由具體型別而定
④ 使用場景不同,包裝類的功能可以覆蓋基本型別,但是一些情況下,基本型別不能代替包裝類。比如泛型在jvm中編譯時是沒有型別概念的,裡面的所有東西都被視為Object來進行一些處理,而基本型別不能完成類似的功能。
21. 說說你對JavaBean的理解以及它的編寫規範? (12.17)
JavaBeans是Java中一種特殊的類,可以將多個物件封裝到一個物件(bean)中。特點是可序列化,提供無參構造器,提供getter方法和setter方法訪問物件的屬性。名稱中的“Bean”是用於Java的可重用軟體元件的慣用叫法。
一個javaBean在編寫時應該按照下面的規範:
① 類是public的
② 所有屬性都是private
③ 提供預設的空參構造器
④ 提供setter()和getter()
⑤ 實現serializable介面
22. 簡單介紹java.lang.Object類中的六個常用方法
① equals()
public boolean equals(Object obj) {
return (this == obj);
}
比較物件的地址是否相同,如果子類重寫一般是比較物件內容是否相同。
② hashCode()
public native int hashCode( );
③ clone()
protected native Object clone() throws CloneNotSupportedException;
建立並返回此物件的副本。
④ toStrinfg()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
把資料轉變成字串返回
⑤ getClass()
public final native Class<?> getClass();
⑥ finalize()
protected void finalize() throws Throwable {}
當垃圾回收確定不再有對物件的引用時,垃圾回收器在物件上呼叫。
23. equals和==的區別
首先它們都是用於比較是否想等的,不同的是:“==”是關係運算符,equals()是方法,同時它們的結果都是布林型。
① “==”使用情況如下:
a.基本資料型別,比較的是值
b.引用資料型別,比較的是地址
c.不能比較沒有父子關係的兩個物件
②equals()方法使用情況如下:
a.系統類一般已經覆蓋了equals(),比較的是內容,比如String
b.使用者自定義類如果沒有重寫equals()方法,將呼叫父類的equals(),比如是Object(),而Object的equals比較的是地址
c.使用者自定義類如果要想知道物件內容值是否想等,必須重寫equals()方法
注意:對於Object類,equals()和“==”效果一樣。
參考:
http://www.bjsxt.com/javamianshiti.html
https://blog.csdn.net/a1436445152/article/details/94010198
https://www.nowcoder.com/