談笑有鴻儒,往來無白丁

          在恰當的時間、地點以恰當的方式表達給恰當的人...  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強!向dudu站長致敬>> > 我的微博敬請收聽

          邢紅瑞 發表于 2007-6-8 16:00:58

          最近給替一個朋友出的幾道java的面試題,主要是面試java高級工程師,報酬就是晚飯,已經淪落的賣藝的境地。
          題目很簡單
          ?? 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使用相同的對象,否則創建新的對象。
          所以這段代碼,大家不要奇怪
          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 壞男孩 閱讀(6004) 評論(3)  編輯  收藏 所屬分類: java命令學習

          FeedBack:
          # re: java中的Boxing和unboxing
          2007-06-21 10:32 | lang
          過來灌水  回復  更多評論
            
          # re: java中的Boxing和unboxing
          2012-07-17 10:59 | ptzhuf
          在java規范中有要求 String 不要用new 。。。。。。。
          至于 Integer 和 Boolean 都用 valueOf  回復  更多評論
            
          # re: java中的Boxing和unboxing
          2014-09-26 11:16 | JackJCSN
          @ptzhuf
          這個地方的String 不new的話很可能會被死鎖的,字符串常量是在JVM中共享的,如果別的程序也用了這個字符串常量去加鎖的話很有可能會造成死鎖。
          感覺更安全和簡便的方法是
          static private final Object LOCK = new Object();
          void testMethod() {
          synchronized(LOCK) {
          ...
          }
          }  回復  更多評論
            
          主站蜘蛛池模板: 阳泉市| 大兴区| 潮安县| 龙州县| 江达县| 孟津县| 永和县| 宝兴县| 民乐县| 通化县| 洪洞县| 岳西县| 江津市| 易门县| 和平区| 台中县| 富蕴县| 高邑县| 彭阳县| 通海县| 东台市| 宣城市| 金昌市| 阳山县| 鲁山县| 和田县| 崇仁县| 二手房| 阳谷县| 福州市| 云南省| 兴城市| 阳东县| 岑巩县| 古丈县| 马龙县| 理塘县| 弥勒县| 宝兴县| 大理市| 峨眉山市|