更新時間:2020-08-04 16:14:23 來源:動力節(jié)點 瀏覽2403次
1. Java中的原始數(shù)據(jù)類型都有哪些,它們的大小及對應(yīng)的封裝類是什么?
(1)boolean
boolean數(shù)據(jù)類型非true即false。這個數(shù)據(jù)類型表示1 bit的信息,但是它的大小并沒有精確定義。
《Java虛擬機規(guī)范》中如是說:“雖然定義了boolean這種數(shù)據(jù)類型,但是只對它提供了非常有限的支持。在Java虛擬機中沒有任何供boolean值專用的字節(jié)碼指令,Java語言表達式所操作的boolean值,在編譯之后都使用Java虛擬機中的int數(shù)據(jù)類型來代替,而boolean數(shù)組將會被編碼成Java虛擬機的byte數(shù)組,每個元素boolean元素占8位”。這樣我們可以得出boolean類型單獨使用是4個字節(jié),在數(shù)組中又是1個字節(jié)。那虛擬機為什么要用int來代替boolean呢?為什么不用byte或short,這樣不是更節(jié)省內(nèi)存空間嗎?實際上,使用int的原因是,對于當下32位的CPU來說,一次進行32位的數(shù)據(jù)交換更加高效。
綜上,我們可以知道:官方文檔對boolean類型沒有給出精確的定義,《Java虛擬機規(guī)范》給出了“單獨時使用4個字節(jié),boolean數(shù)組時1個字節(jié)”的定義,具體還要看虛擬機實現(xiàn)是否按照規(guī)范來,所以1個字節(jié)、4個字節(jié)都是有可能的。這其實是一種時空權(quán)衡。
boolean類型的封裝類是Boolean。
(2)byte——1 byte——Byte
(3)short——2 bytes——Short
(4)int——4 bytes——Integer
(5)long——8 bytes——Long
(6)float——4 bytes——Float
(7)double——8 bytes——Double
(8)char——2 bytes——Character
2. 談一談”==“與”equals()"的區(qū)別。
《Think in Java》中說:“關(guān)系操作符生成的是一個boolean結(jié)果,它們計算的是操作數(shù)的值之間的關(guān)系”。
"=="判斷的是兩個對象的內(nèi)存地址是否一樣,適用于原始數(shù)據(jù)類型和枚舉類型(它們的變量存儲的是值本身,而引用類型變量存儲的是引用);equals是Object類的方法,Object對它的實現(xiàn)是比較內(nèi)存地址,我們可以重寫這個方法來自定義“相等”這個概念。比如類庫中的String、Date等類就對這個方法進行了重寫。
綜上,對于枚舉類型和原始數(shù)據(jù)類型的相等性比較,應(yīng)該使用"==";對于引用類型的相等性比較,應(yīng)該使用equals方法。
3. Java中的四種引用及其應(yīng)用場景是什么?
強引用: 通常我們使用new操作符創(chuàng)建一個對象時所返回的引用即為強引用
軟引用: 若一個對象只能通過軟引用到達,那么這個對象在內(nèi)存不足時會被回收,可用于圖片緩存中,內(nèi)存不足時系統(tǒng)會自動回收不再使用的Bitmap
弱引用: 若一個對象只能通過弱引用到達,那么它就會被回收(即使內(nèi)存充足),同樣可用于圖片緩存中,這時候只要Bitmap不再使用就會被回收
虛引用: 虛引用是Java中最“弱”的引用,通過它甚至無法獲取被引用的對象,它存在的唯一作用就是當它指向的對象回收時,它本身會被加入到引用隊列中,這樣我們可以知道它指向的對象何時被銷毀。
4. object中定義了哪些方法?
clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()
5. hashCode的作用是什么?
請參見散列表的基本原理與實現(xiàn)
6. ArrayList, LinkedList, Vector的區(qū)別是什么?
ArrayList: 內(nèi)部采用數(shù)組存儲元素,支持高效隨機訪問,支持動態(tài)調(diào)整大小
LinkedList: 內(nèi)部采用鏈表來存儲元素,支持快速插入/刪除元素,但不支持高效地隨機訪問
Vector: 可以看作線程安全版的ArrayList
7. String, StringBuilder, StringBuffer的區(qū)別是什么?
String: 不可變的字符序列,若要向其中添加新字符需要創(chuàng)建一個新的String對象
StringBuilder: 可變字符序列,支持向其中添加新字符(無需創(chuàng)建新對象)
StringBuffer: 可以看作線程安全版的StringBuilder
8. Map, Set, List, Queue、Stack的特點及用法。
Map
Set
List
Queue
Stack
更詳細的說明請參考官方文檔,對相關(guān)數(shù)據(jù)結(jié)構(gòu)不太熟悉的同學(xué)可以參考《算法導(dǎo)論》或其他相關(guān)書籍。
9. HashMap和HashTable的區(qū)別
HashTable是線程安全的,而HashMap不是
HashMap中允許存在null鍵和null值,而HashTable中不允許
更加詳細的分析請參考深入解析HashMap、HashTable
10. HashMap的實現(xiàn)原理
簡單的說,HashMap的底層實現(xiàn)是“基于拉鏈法的散列表”。詳細分析請參考深入解析HashMap、HashTable
以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“常見的Java面試基礎(chǔ)知識總結(jié)”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀