1. 程式人生 > >Java筆試題——if條件判斷、自增運算子

Java筆試題——if條件判斷、自增運算子

1.if條件判斷

結果 分析:

if條件判斷中,flag = true先是一個賦值語句,賦值完成後,flag成為邏輯判斷條件,會自動拆箱。

2 .自增運算子

3 .自動拆箱裝箱問題

 

結果分析:

在基本資料型別和包裝類的比較中,Java會自動進行拆箱裝箱工作。

 

 

 

 

結果分析:

對於==來說:

如果運算子兩邊有一方是基本型別,一方是包裝型別,在進行==邏輯判斷時,包裝型別會自動進行拆箱操作,因此i==j返回true;

如果都是包裝型別,那麼==就是按照正常判斷邏輯來,==比較的是物件的地址,但是下面這種情況除外:

    在-128至127這個區間,如果建立Integer物件的時候(1)Integer i = 1; (2) Integer i = Integer.valueOf(1); 如果是這兩種情況創建出來的物件,那麼其實只會建立一個物件,這些物件已經快取在一個叫做IntegerCache裡面了,所以==比較是相等的。如果不在-128至127這個區間,不管是通過什麼方式創建出來的物件,==永遠是false,也就是說他們的地址永遠不會相等。

舉例測試如下:

         Integer i1 = 8; 

         Integer i2 = 8; 

         Integer i3 = 300; //超過了127這個範圍

         Integer i4 = 300; 

         Integer i5 = Integer.valueOf(8);

         Integer i6 = new Integer(8);

//         System.out.println(i1 == i2);//true, 在-128至127這個區間,Integer i = 1;和Integer i = Integer.valueOf(1); 這兩種方式建立的物件相同

//         System.out.println(i3 == i4);//false ,超過這個區間,創建出的是不同物件

//         System.out.println(i1 == i5);//true , 在-128至127這個區間,Integer i = 1;和Integer i = Integer.valueOf(1); 這兩種方式建立的物件相同

         System.out.println(i1 == i6);//false ,在指定區間,只有上面兩種方式創建出的物件才相同,通過new出來的是不相同的

對於equals來說:

equals不同的物件由不同的實現,對於Integer來說,equals比較的是值。因此,j.equals(i);返回的是true。

4 .型別轉換問題

 

結果分析:

被final修飾的變數是常量,這裡的b6=b4+b5可以看成是b6=10;在編譯時就已經變為b6=10了

而b1和b2是byte型別,java中進行計算時候將他們提升為int型別,再進行計算,b1+b2計算後已經是int型別,賦值給b3,b3是byte型別,型別不匹配,編譯不會通過,需要進行強制轉換。

Java中的byte,short,char進行計算時都會提升為int型別。

5.finally執行在return前還是return後

 

 

結果 分析:

finally語句是在try(或catch)的return語句執行之後,return返回之前執行。過程如下:在try中如果有return語句,他會首先檢測是否有fianlly,如果有的話,就儲存try中return要返回的值,然後執行finally中的方法,如果fianlly沒有返回值,則finally方法執行完畢之後,返回執行try中的return方法,他會取出之前儲存的return值,進行返回。

finally是在try中執行完return後再執行的。只有當finally中也有return的時候,方法將直接返回,不再執行任何程式碼。 

參考: