標籤:
1--程式碼片段:
12345 |
byte b1= 1 ,b2= 2 ,b3,b6; final byte b4= 4 ,b5= 6 ; b6=b4+b5; b3=(b1+b2); System.out.println(b3+b6); |
關於上面程式碼片段敘述正確的是()
- 輸出結果:13
- 語句:b6=b4+b5編譯出錯
- 語句:b3=b1+b2編譯出錯
- 運行期拋出異常
分析:
運算式的資料類型自動提升, 關於類型的自動提升,注意下面的規則。
①所有的byte,short,char型的值將被提升為int型;
②如果有一個運算元是long型,計算結果是long型;
③如果有一個運算元是float型,計算結果是float型;
④如果有一個運算元是double型,計算結果是double型;而聲明為final的變數會被JVM最佳化,第6行相當於 b6 = 10 沒有final修飾的變數相加後會被自動提升為int型,與目標類型byte不相容,需要強制轉換(向下轉型)。 C.被final修飾的變數是常量,這裡的b6=b4+b5可以看成是b6=10;在編譯時間就已經變為b6=10了而b1和b2是byte類型,java中進行計算時候將他們提升為int類型,再進行計算,b1+b2計算後已經是int類型,賦值給b3,b3是byte類型,類型不符,編譯不會通過,需要進行強制轉換。Java中的byte,short,char進行計算時都會提升為int類型。 1.需要強制轉換(向下轉型)。
2.沒有final修飾的變數相加後會被自動提升為int型,與目標類型byte不相容,要向下轉型。 2--下面代碼運行結果是()
123456789101112131415161718 |
public class Test{ public int add( int a, int b){ try { return a+b; } catch (Exception e) { System.out.println( "catch語句塊" ); } finally { System.out.println( "finally語句塊" ); } return 0 ; } public static void main(String argv[]){ Test test = new Test(); System.out.println( "和是:" +test.add( 9 , 34 )); } } |
- catch語句塊,和是:43
- 編譯異常
- finally語句塊,和是:43
- 和是:43,finally語句塊
分析:
答案是C對於try塊中的return,先計算return 後面的運算式,緩衝結果跳到finally語句塊中執行,如果finally語句塊中有return語句,則不會再去執行try中的語句。如果finally中沒有return語句,則會再次去try語句塊中執行return 3--以下java程式碼,執行後的結果是()
1234 |
java.util.HashMap map= new java.util.HashMap(); map.put( "name" , null ); map.put( "name" , "Jack" ); System.out.println(map.size()); |
C.HashMap是Map介面的實作類別,並且不保證元素的順序恒久不變,它的底層使用的是數組和鏈表,通過hashCode()方法和equals方法保證鍵的唯一性HashMap允許null鍵和null值使用put方法向HashMap中添加元素時,如果鍵不存在,則添加該元素,並返回null;如果鍵已經存在,則把該鍵對應的值進行覆蓋,返回原來的鍵,由於鍵都是"name",所以第二次添加的會把第一次的值覆蓋,並返回第一次的鍵,所以HashMap中還是只有一個元素 Map Set無重複,List按順序儲存。
Java這點事