談笑有鴻儒,往來無白丁

          在恰當的時間、地點以恰當的方式表達給恰當的人...  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持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 壞男孩 閱讀(5997) 評論(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) {
          ...
          }
          }  回復  更多評論
            
          主站蜘蛛池模板: 郯城县| 湖南省| 嘉兴市| 建宁县| 巩留县| 富平县| 岗巴县| 桃园县| 洛浦县| 景东| 环江| 福海县| 泽普县| 武定县| 资中县| 河东区| 阜康市| 兴化市| 孟连| 巢湖市| 泾源县| 阳东县| 赤峰市| 布拖县| 延长县| 绥中县| 建瓯市| 武鸣县| 普格县| 芜湖市| 凤冈县| 甘谷县| 南开区| 麟游县| 长武县| 韶山市| 兰西县| 崇文区| 浪卡子县| 石首市| 彭泽县|