九種基本數(shù)據(jù)類型的大小象缀,以及它們的封裝類:
注:
1.int是基本數(shù)據(jù)類型勒叠,Integer是int的封裝類,是引用類型瘤缩。int默認值是0徐矩,而Integer默認值是null经磅,所以Integer能區(qū)分出0和null的情況掰担。一旦java看到null诀紊,就知道這個引用還沒有指向某個對象,再任何引用使用前沪哺,必須為其指定一個對象沈自,否則會報錯。
2.基本數(shù)據(jù)類型在聲明時系統(tǒng)會自動給它分配空間凤粗,而引用類型聲明時只是分配了引用空間酥泛,必須通過實例化開辟數(shù)據(jù)空間之后才可以賦值
數(shù)組對象也是一個引用對象,將一個數(shù)組賦值給另一個數(shù)組時只是復制了一個引用嫌拣,所以通過某一個數(shù)組所做的修改在另一個數(shù)組中也看的見。
Switch能否用string做參數(shù)?
Switch可以用整型呆躲,枚舉類型异逐,boolean,string類型做參數(shù)插掂,但是不能用浮點型灰瞻。
equals與==的區(qū)別。
==操作比較的是兩個變量的值是否相等辅甥,對于引用變量類型表示的是兩個變量在堆中的地址是否相同酝润,即棧中的內容是否相同。equals比較的是兩個對象的內容璃弄。
Object有哪些公用方法
Object是所有類的父類要销,任何類都默認繼承Object類。
Object類的方法:
1.getClass:final方法夏块,獲得運行時類型
2.equals:
3.notify()喚醒在此對象監(jiān)視器上等待的單個線程疏咐。
4.notifyAll()喚醒在此對象監(jiān)視器上等待的所有線程纤掸。
5.wait()在其他線程調用此對象的notify()方法或notifyAll()方法前,導致當前線程等待浑塞。
6.clone:保護方法借跪,實現(xiàn)對象的淺復制,只有實現(xiàn)了Cloneable接口才能調用該方法酌壕,否則拋出CloneNotSupportedException異常掏愁。
Java里除了8中基本類型傳參數(shù)都是值傳遞,其它類對象傳參數(shù)都是引用傳遞卵牍,我們有時候不希望在方法里將參數(shù)改變托猩,這就需要在類中復寫clone方法。
淺復制與深復制
淺復制:被復制對象的所有變量都含有與原來對象相同的值辽慕,而所有的對其它對象的引用仍然指向原來的對象京腥。換言之,淺復制僅僅復制所考慮的對象溅蛉,而不復制它所引用的對象公浪。
深復制:被復制的對象以及該對象所引用的其它對象都復制了一遍。
Java的四種引用船侧,強弱軟虛欠气,以及它們用到的場景
參考:my.oschina.net/ydsakyclguozi/blog/404389
強引用:Object o = new Object(),這里o就是一個強引用镜撩。如果一個對象具有強引用预柒,即使內存不足,也絕不會被垃圾回收器回收袁梗。如果不引用時宜鸯,使o = null,或超出對象的生命周期范圍遮怜,就會被gc回收淋袖。
軟引用:如果一個對象只有軟引用,當內存空間足夠時锯梁,不會被gc回收即碗,當內存空間不足時,會被gc回收陌凳。示例:
String str=new String("abc");//強引用
SoftReference softRef=newSoftReference(str);//軟引用
弱引用:弱引用與軟引用的區(qū)別在于:只具有弱引用的對象擁有更短的生命周期剥懒。在垃圾回收器線程掃描它所管轄的內存區(qū)域的過程中,一旦發(fā)現(xiàn)了只具有弱引用的對象合敦,不管當前內存空間足夠與否初橘,都會回收它的內存。不過,由于垃圾回收器是一個優(yōu)先級很低的線程壁却,因此不一定會很快發(fā)現(xiàn)那些只具有弱引用的對象批狱。
虛引用:“虛引用”顧名思義,就是形同虛設展东,與其他幾種引用都不同赔硫,虛引用并不會決定對象的生命周期。如果一個對象僅持有虛引用盐肃,那么它就和沒有任何引用一樣爪膊,在任何時候都可能被垃圾回收器回收。
HashCode的作用:
HashCode的存在主要是為了查找的快捷性砸王,HashCode是用來在散列存儲結構中確定對象的存儲地址的推盛。如果兩個對象的hashCode值不同,則這兩個對象一定不同谦铃。
ArrayList耘成、LinkedList和Vector的區(qū)別:
LinkedList,ArrayList與Vector的比較:
這三個類都是基于數(shù)組實現(xiàn)的List類
LinkedList和ArrayList是線程不安全的驹闰,Vector是線程安全的瘪菌,但是Vector性能差。
ArrayList是一個可改變大小的數(shù)組.當更多的元素加入到ArrayList中時,其大小將會動態(tài)地增長.內部的元素可以直接通過get與set方法進行訪問,因為ArrayList本質上就是一個數(shù)組嘹朗。
LinkedList是一個雙鏈表,在添加和刪除元素時具有比ArrayList更好的性能.但在get與set方面弱于ArrayList师妙。
String、StringBuffer和StringBuilder的區(qū)別
String類是不可變類屹培,任何String的改變都會產生一個新的String對象默穴,而StringBuffer和StringBuilder都是可變類。StringBuffer支持并發(fā)操作褪秀,線程安全蓄诽,適合多線程使用,StringBuilder不支持并發(fā)操作溜歪,線程不安全若专,不支持多線程使用,但StringBuilder速度更快蝴猪。
Map、Set膊爪、List自阱、Queue、Stack的特點和用法
Map是使用鍵值對來存儲數(shù)據(jù)米酬,且一一映射沛豌,值可以重復,但是鍵不能。TreeMap可以保證順序加派,HashMap則不行叫确。
Set是不包含重復元素的集合,set最多包含一個null元素芍锦。
List是有序的可重復集合竹勉,可以再任意位置增加和刪除元素。
Queue先進先出娄琉。
Stack后進先出次乓。
使用建議:如果涉及堆棧,隊列等操作孽水,建議使用List票腰;對于快速插入和刪除元素的,建議使用LinkedList女气;如果需要快速隨機訪問元素的杏慰,建議使用ArrayList。
HashMap和HashTable的區(qū)別:
HashMap可接受值為null炼鞠,是不同步的缘滥,HashTable不能接受值為null,是同步的簇搅。