談笑有鴻儒,往來無白丁

          在恰當(dāng)?shù)臅r間、地點以恰當(dāng)?shù)姆绞奖磉_(dá)給恰當(dāng)?shù)娜?..  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強(qiáng)!向dudu站長致敬>> > 我的微博敬請收聽

          邢紅瑞 發(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就是轉(zhuǎn)換對象到基本類型。
          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) {
          ??? ...
          ??? }
          ? }
          應(yīng)該用new,不要直接=,對于int,最好使用int a[0] ,因為array也是對象,不像Integer,a[0]的值可以改變。

          posted on 2007-06-12 22:39 壞男孩 閱讀(5997) 評論(3)  編輯  收藏 所屬分類: java命令學(xué)習(xí)

          FeedBack:
          # re: java中的Boxing和unboxing
          2007-06-21 10:32 | lang
          過來灌水  回復(fù)  更多評論
            
          # re: java中的Boxing和unboxing
          2012-07-17 10:59 | ptzhuf
          在java規(guī)范中有要求 String 不要用new 。。。。。。。
          至于 Integer 和 Boolean 都用 valueOf  回復(fù)  更多評論
            
          # 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) {
          ...
          }
          }  回復(fù)  更多評論
            
          主站蜘蛛池模板: 满城县| 武鸣县| 偏关县| 于田县| 儋州市| 开鲁县| 兴隆县| 本溪| 杭锦旗| 古交市| 台北市| 博罗县| 绥德县| 安义县| 五寨县| 兴海县| 梓潼县| 富锦市| 油尖旺区| 商河县| 阳曲县| 淄博市| 康马县| 邮箱| 郯城县| 九龙城区| 和林格尔县| 红河县| 出国| 丰镇市| 莎车县| 临夏县| 甘泉县| 武定县| 会理县| 海南省| 洪湖市| 宜阳县| 临朐县| 城步| 陇南市|