據說這是一套阿里Java工程師答題正確率只有50%的題目,由泰山版《Java開發手冊》作者孤盡親自出題,來測測憑藉你的Java基礎寫下答案,看看你能對幾題?
題目一: float a = 0.125f; double b = 0.125d; System.out.println((a - b) == 0.0); 代碼的輸出結果是什麼?A. trueB. false
題目二: double c = 0.8; double d = 0.7; double e = 0.6; 那麼c-d與d-e是否相等?A. trueB. false
題目三: System.out.println(1.0 / 0); 的結果是什麼?A. 拋出異常B. InfinityC. NaN
題目四: System.out.println(0.0 / 0.0); 的結果是什麼?A. 拋出異常B. InfinityC. NaND. 1.0
題目五: >>和>>>的區別是?A. 任何整數沒有區別B. 負整數一定沒有區別C. 浮點數可以>>運算,但是不可以>>>運算D. 正整數一定沒有區別
題目六: 某個類有兩個重載方法:void f(String s) 和 void f(Integer i),那麼f(null)的會調用哪個方法?A. 前者B. 後者C. 隨機調用D. 編譯出錯
題目七: 某個類有兩個重載方法:void g(double d) 和 void g(Integer i),那麼g(1)的會調用哪個方法?A. 前者B. 後者C. 隨機調用D. 編譯出錯
題目八: String a = null; switch(a)匹配case中的哪一項?A. nullB. "null"C. 不與任何東西匹配,但不拋出異常D. 直接拋出異常
題目九: <String, T, Alibaba> String get(String string, T t) { return string; } 此方法:A. 編譯錯誤,從左往右第一個String處B. 編譯錯誤,T處C. 編譯錯誤,Alibaba處D. 編譯正確
題目十: HashMap 初始容量 10000 即 new HashMap(10000),當往裡 put 10000 個元素時,需要 resize 幾次(初始化的那次不算)?A. 1次B. 2次C. 3次D. 0次
答案見下面哦,附帶解析~
題目一:float a = 0.125f; double b = 0.125d; System.out.println((a - b) == 0.0); 代碼的輸出結果是什麼?A. true
B. false
解釋:首先浮點數是由符號位、指數位、有效數字三個部分組成,而0.125f、0.125d均可以精確的表示出來,不存在精度丟失,因而a-b==0.0。
題目二:double c = 0.8; double d = 0.7; double e = 0.6; 那麼c-d與d-e是否相等?A. true
B. false
解釋:類似十進位裡面的分數1/3,就是無限循環數,無法精確表示出來,同理浮點數裡有些數值也沒法精確表示出來。System.out.println(0.8-0.7);//輸出0.10000000000000009System.out.println(0.7-0.6);//輸出0.09999999999999998
題目三:System.out.println(1.0 / 0); 的結果是什麼?A. 拋出異常
B. Infinity
C. NaN
解釋:在整型運算中,除數是不能為0的,否則直接運行異常。但是在浮點數運算中,引入了無限這個概念。可以看一下源碼Double的定義, public static final double POSITIVE_INFINITY = 1.0 / 0.0;
題目四:System.out.println(0.0 / 0.0); 的結果是什麼?A. 拋出異常
B. Infinity
C. NaN
D. 1.0
解釋:java源碼,Double包裝類下,public static final double NaN = 0.0d / 0.0;NAN表示非數字,它與任何值都不相等,甚至不等於它自己。
題目五:>>和>>>的區別是?A. 任何整數沒有區別
B. 負整數一定沒有區別
C. 浮點數可以>>運算,但是不可以>>>運算
D. 正整數一定沒有區別
解釋:>>>表示不帶符號向右移動二進位數,移動後前面統統補0;兩個箭頭表示帶符號移動,正整數的符號位是0,因而兩者沒有區別
題目六:某個類有兩個重載方法:void f(String s) 和 void f(Integer i),那麼f(null)的會調用哪個方法?A. 前者
B. 後者
C. 隨機調用
D. 編譯出錯
解釋:1)精確匹配->2)基本數據類型(自動轉換成更大範圍)->3)封裝類(自動拆箱與裝箱)->4)子類向上轉型依次匹配->5)可變參數匹配。子類向上轉型,兩者的父類都是object類(null默認類型是object),因而會同時匹配上兩者,編譯器會報Ambiguous method call. Both錯誤
題目七:某個類有兩個重載方法:void g(double d) 和 void g(Integer i),那麼g(1)的會調用哪個方法?A. 前者
B. 後者
C. 隨機調用
D. 編譯出錯
解釋:1)精確匹配->2)基本數據類型(自動轉換成更大範圍)->3)封裝類(自動拆箱與裝箱)->4)子類向上轉型依次匹配->5)可變參數匹配,本題是進行到第二步匹配上了。
題目八:String a = null; switch(a)匹配case中的哪一項?A. null
B. "null"
C. 不與任何東西匹配,但不拋出異常
D. 直接拋出異常
解釋:在Java程式語言的設計者的判斷中,這比靜默跳過整個開關語句要合理,因為使用null作為開關標籤的話,編寫的代碼將永遠不會執行。
題目九:<String, T, Alibaba> String get(String string, T t) { return string; } 此方法:A. 編譯錯誤,從左往右第一個String處
B. 編譯錯誤,T處
C. 編譯錯誤,Alibaba處
D. 編譯正確
解釋:尖括號裡的每個元素都指代一種未知類型,在定義處只具備執行Object方法的能力,在編譯期間,所有的泛型信息都會被擦除,編譯後,get()的兩個參數是Object,返回值也是Object。
題目十:HashMap初始容量10000即new HashMap(10000),當往裡put 10000個元素時,需要resize幾次(初始化的那次不算)?A. 1次
B. 2次
C. 3次
D. 0次
解釋:比10000大,且最接近的2的n次方數是16384,默認負載因子是0.75,16384*0.75 = 12288>10000,因而不需要擴容。
本文為阿里雲原創內容,未經允許不得轉載。