談笑有鴻儒,往來無白丁

          在恰當的時間、地點以恰當的方式表達給恰當的人...  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持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 壞男孩 閱讀(6002) 評論(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) {
          ...
          }
          }  回復  更多評論
            
          主站蜘蛛池模板: 昆山市| 天等县| 淮北市| 昌邑市| 句容市| 河西区| 勐海县| 通化县| 竹山县| 宜昌市| 南川市| 台东县| 波密县| 夏河县| 商洛市| 剑河县| 南部县| 德兴市| 井陉县| 刚察县| 建始县| 铜山县| 湟中县| 濮阳市| 江阴市| 大新县| 博野县| 万宁市| 莱州市| 临潭县| 建宁县| 宜良县| 穆棱市| 玛曲县| 鄂托克前旗| 大洼县| 阿拉善盟| 兴义市| 岑巩县| 广安市| 广东省|