CSDN社群十問十答(Jave第一期)

CSDN學院發表於2019-06-14

過去的一週,我們從CSDN Jave社群中,整理了小夥伴們提問較多的問題,並請技術達人對這些問題進行了回答,現整理如下。歡迎大家在社群中積極提問哦,積極提問的小夥伴還將獲得CSDN提供的神祕紀念禮品哦!

問題1、為什麼優先返回空集合而非null?    
如果程式要返回一個不包含任何值的集合,確保返回的是空集合而不是null。這能節省大量的”if else”檢查。

問題2、為什麼謹慎操作字串
如果兩個字串在for迴圈中使用+操作符進行拼接,那麼每次迴圈都會產生一個新的字串物件。這不僅浪費記憶體空間同時還會影響效能。

問題3、陣列與ArrayList有什麼區別?  

 陣列是定長的,而ArrayList是變長的。由於陣列長度是固定的,因此在宣告陣列時就已經分配好記憶體了。而陣列的操作則會更快一些。

問題4、String、StringBuffer和StringBuilder的區別?    
"1. String是字串常量,而StringBuffer、StringBuilder都是字串變數,即String物件一建立後不可更改,而後兩者的物件是可更改的:
2. StringBuffer是執行緒安全的,而StringBuilder是非執行緒安全的,這是由於StringBuffer對方法加了同步鎖或者對呼叫的方法加了同步鎖
3. String更適用於少量的字串操作的情況,StringBuilder適用於單執行緒下在字元緩衝區進行大量操作的情況,StringBuffer適用於多執行緒下在字元緩衝區進行大量操作的情況"

問題5、static關鍵字可以修飾什麼?    
可以用來修飾:成員變數,成員方法,程式碼塊,內部類等。

問題6、使用static存在什麼問題?    
"1.佔用記憶體,並且記憶體一般不會釋放;
2.在系統不夠記憶體情況下會自動回收靜態記憶體,這樣就會引起訪問全域性靜態錯誤。
3.在Android中不能將activity作為static靜態物件,這樣使activity的所有元件物件都存入全域性記憶體中,並且不會被回收。"

問題7、靜態變數和例項變數的區別是什麼?    
1。 靜態變數是被static修飾符修飾的變數,也稱為類變數,它屬於類,不屬於類的任何一個物件,一個類不管建立多少個物件,靜態變數在記憶體中有且僅有一個拷貝。靜態變數可以實現讓多個物件共享記憶體。在Java開發中,上下文類和工具類中通常會有大量的靜態成員。
2. 例項變數必須依存於某一例項,需要先建立物件然後通過物件才能訪問到它"

問題8、裝箱、拆箱什麼含義?    
"裝箱就是自動將基本資料型別轉換為包裝器型別
拆箱就是自動將包裝器型別轉換為基本資料型別"

問題9、什麼時候裝箱/拆箱?    
什麼時候拆箱主要取決於:在當前場景下,你需要的是引用型別還是原生型別。若需要引用型別,但傳進來的值是原生型別,則自動裝箱(例如,使用equals方法時傳進來原生型別的值);若需要的是原生型別,但傳進來的值是引用型別,則自動拆箱(例如,使用運算子進行運算時,運算元是包裝型別)。

問題10、為什麼要使用萬用字元    
萬用字元的設計存在一定的場景,例如在使用泛型後,首先宣告瞭一個Animal的類,而後宣告瞭一個繼承Animal類的Cat類,顯然Cat類是Animal類的子類,但是List卻不是List的子型別,而在程式中往往需要表達這樣的邏輯關係。為了解決這種類似的場景,在泛型的引數型別的基礎上新增了萬用字元的用法。


歡迎大家掃碼進群交流哦!我們還將每週分享技術學習資源+每月推出技術主題月活動+群主、技術達人線上答疑互動!

相關文章