邢紅瑞 發(fā)表于 2007-6-8 16:00:58
|
最近給替一個朋友出的幾道java的面試題,主要是面試java高級工程師,報酬就是晚飯,已經(jīng)淪落的賣藝的境地。 題目很簡單 ?? Integer i1 = 100; ?? Integer i2 = 100; ?? Integer i3 = 1000; ?? Integer i4 = 1000; ?? System.out.println(i1==i2); ?? System.out.println(i3==i4); 很遺憾,沒有一個答對的,正確答案是 true false 如果面試者寫這樣的寫是錯誤的,就算通過。 這個的原因要從java5的Boxing和unboxing談起,boxing就是封裝基本類型的對象,unboxing就是轉換對象到基本類型。 Integer, Long, Float, Double, Short, Character etc.都是這樣的類型他們是immutable。 Boxing 在jdk1.4.2中, 必須是// Assigning primitive type to wrapper type ?? Integer iWrapper = new Integer(10); java5中 ?// Assigning primitive type to wrapper type ?? Integer iWrapper = 10; unboxing 在jdk1.4.2中, int iPrimitive = iWrapper.intValue(); java5中 int iPrimitive = iWrapper; 下面是基本類型作為對象存儲的范圍, boolean values true and false All byte values short values between -128 and 127 int values between -128 and 127 char in the range \u0000 to \u007F 如果int values between -128 and 127,VM使用相同的對象,否則創(chuàng)建新的對象。 所以這段代碼,大家不要奇怪 System.out.println(0L == 0); System.out.println(((Long)0L).equals(0)); 第二行代碼是0不等于0 因為大家犯這樣的一個錯誤 ?static private final String LOCK = "LOCK"; ? void testMethod() { ??? synchronized(LOCK) { ??? ... ??? } ? } 應該用new,不要直接=,對于int,最好使用int a[0] ,因為array也是對象,不像Integer,a[0]的值可以改變。
|
|
posted on 2007-06-12 22:39
壞男孩 閱讀(5995)
評論(3) 編輯 收藏 所屬分類:
java命令學習