1. 程式人生 > >【每日一題】Java 基本資料型別基礎面試題

【每日一題】Java 基本資料型別基礎面試題

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

原文作者資訊

作者:工匠若水

公眾號: 碼農每日一題

(1)問:如下程式語句有什麼問題嗎?

  1. short s1 = 1;

  2. s1 = s1 + 1;    //1

  3. short s2 = 1;

  4. s2 += 1;    //2

答:對於註釋 1 來說,在 s1+1 運算時會自動提升表示式的型別為 int,所以將 int 賦予給 short 型別的變數 s1 會出現型別轉換錯誤(無法編譯,IDE 提示錯誤),除非主動加上強轉。對於註釋 2 來說 += 是 java 語法規定的運算子,所以 java 編譯器會對它進行轉換特殊處理,故可以正確編譯執行。

(2)問:java 中 char 型別變數能不能儲存一箇中文的漢字,為什麼?

答:java 的 char 型別變數是用來儲存 Unicode 編碼字元的,Unicode 字符集包含了漢字,所以 char 型別自然就能儲存漢字,但是在某些特殊情況下某個生僻漢字可能沒有包含在 Unicode 編碼字符集中,這種情況下 char 型別就不能儲存該生僻漢字了。

(3)問:java 的 Integer 和 int 有什麼區別?

答:int 是 java 內建基本資料型別之一,java 為每個基本型別都提供了一個封裝類,Integer 就是 int 的封裝類(也叫包裝型別);int 變數的預設值為 0,Integer 變數的預設值為 null,所以 Integer 可以區分出未賦值和值為 0 的區別;Integer 類內部提供了一些關於整數操作的方法,例如上文用到的表示整數的最大值和最小值。

(4)問:java 的 switch 語句能否作用在 byte 型別變數上,能否作用在 long 型別變數上,能否作用在 String 型別變數上?

答:由於 byte 的儲存範圍小於 int,可以向 int 型別進行隱式轉換,所以 switch 可以作用在 byte 型別變數上;由於 long 的儲存範圍大於 int,不能向 int 進行隱式轉換,只能強制轉換,所以 switch 不可以作用在 long 型別變數上;對於 String 型別變數在 Java 1.7 版本之前不可以,1.7 版本之後是可以的。

(5)問:能否在不進行強制轉換的情況下將一個 double 值賦值給 long 型別的變數?

答:不行,我們不能在沒有強制型別轉換的前提下將一個 double 值賦值給 long 型別的變數,因為 double 型別的範圍比 long 型別更廣,所以必須要進行強制轉換。

(6)問:java 中 3*0.1 == 0.3 將會返回什麼?true 還是 false?

答:false,因為浮點數不能完全精確的表示出來,一般都會損失精度。

(7)問:java 中 float f = 3.4; 是否正確?

答:不正確,3.4 是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於向下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制型別轉換 float f = (float)3.4; 或者寫成 float f = 3.4F; 才可以。

看個笑話放鬆一下

棧和佇列的區別是啥?

吃多了拉就是佇列,吃多了吐就是棧。

The positive thinker sees the invisible, feels the intangible, and achieves the impossible.

心態積極的人能夠看到別人無法看到的,感悟別人無法感悟的,完成他人無法完成的。