6、String s = new String("xyz");建立了幾個String Object? 兩者之間有什麼區別? spa
嚴格的說應該是一個或者兩個。 線程
由於若是常量池以前沒有"xyz"這個對象,那麼它首先會在常量池裏面建立一個"xyz"對象。若是以前常量池就已經有一個"xyz"對象了,那麼就不會在常量池裏面再建立了,由於常量池裏面的對象不會重複。 code
而每new String一次,就會在內存中建立一個對象。它是以常量池裏面的對象爲模板建立的。 對象
7、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後? 進程
1.finally {}必定會執行,只有一種狀況下不會執行,即調用了system.exit(),終止了虛擬機進程。 內存
2. finally始終是在跳出方法以前被執行,經常使用來作一些資源清理工做,因此在return(跳出方法)前執行。 資源
3.比較複雜點的狀況是,若是return 後面有一個表達式,那麼會先執行表達式的內容,但並不會立刻跳出方法,而是執行finally塊,若finally也有return語句,整個方法會從finally的return跳出,若finally中沒有return,則會再從try{}中的return跳出。 同步
8、Integer與int的區別 虛擬機
1.int是基本數據類型,直接存數值;Integer是int的包裝類。int和Integer均可以表示某一個數值。 it
2. Integer裏面定義了一些靜態轉換方法,用於實現基本數據類型和String之間的轉換。
3. int的默認值爲0,而Integer的默認值爲null,因此Integer能夠區分出未賦值和值爲0的狀況,而int則沒辦法區分這種狀況。
4. int是基本類型,Integer是引用類型,聲明爲int的變量不須要實例化,聲明爲Interger的變量須要實例化
5.Integer是比int更高級的數據類型,int通常只用在數值計算中,而Integer用在須要使用對象的地方,好比Map、Set和List集合裏面存放的都是Object,須要使用包裝類。
9、sleep()和wait()有什麼區別?
1. sleep是Thread類的方法;wait是Object的方法。
2.調用sleep不會釋放對象鎖;調用wait會釋放對象鎖,使得其餘線程可使用同步塊或者同步方法。
3.sleep會致使線程暫停指定時間,時間一到會自動恢復。而wait須要調用notify或者notifyAll喚醒。
4.做用範圍不同。wait,notify和notifyAll只能在同步控制方法或者同步控制塊裏面使用,而sleep能夠在任何地方使用。
5. sleep必須捕獲異常,而wait,notify和notifyAll不須要捕獲異常。
10、啓動一個線程是用run()仍是start()?
啓動一個線程是調用start()方法,線程進入就緒狀態,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。當cpu分配給它時間時,纔開始執行run()方法。
若直接調用run()方法,只是把該方法執行了一遍,並無真正啓動一個線程