feng

          飄逸~~~~~life

          java中奇怪的null

          項(xiàng)目開發(fā)測(cè)試中發(fā)現(xiàn)一個(gè)問(wèn)題,后來(lái)發(fā)現(xiàn)是null在作怪,看看這個(gè)程序
          public class Feng {
           public static void main(String[] args) {
            Feng feng=null;
            String f=null;
            String a=""+feng;
            String b=""+f;
            System.out.println(a);
            System.out.println(b);
            
            if(a.equals("null")){
             System.out.println("怎么回事");
            }
            if(b.equals("null")){
             System.out.println("怎么變出來(lái)的");
            }
           }

          }

          大家可以運(yùn)行一下,結(jié)果是

          null
          null
          怎么回事
          怎么變出來(lái)的
          很奇怪吧? 也就是不管是一個(gè)普通對(duì)象的null還是一個(gè)String對(duì)象的null  ,如果進(jìn)行""+null這樣的操作的話
          都變成了一個(gè)"null"字符串,大家記住吧,開發(fā)中考慮這個(gè)問(wèn)題,省得實(shí)際項(xiàng)目出錯(cuò),知道為什么的,可以解釋一下,xiexie!

          posted on 2008-08-29 11:18 feng 閱讀(2630) 評(píng)論(8)  編輯  收藏

          Feedback

          # re: java中奇怪的null 2008-08-29 11:41 隔葉黃鶯

          普通對(duì)象的 null 還是 String 對(duì)象的 null,它們都是 null,都一樣的

          String a=""+feng; JVM 執(zhí)行的是 StringBuilder.append(Object)
          String b=""+f; JVM 執(zhí)行的是 StringBuilder.append(String)

          這時(shí)候你就要看這兩個(gè)方法的實(shí)例了:
          1. public StringBuilder append(Object obj) {
          return append(String.valueOf(obj));
          }

            而在 String.valueOf(Object) 中是
          return (obj == null) ? "null" : obj.toString();

          2. StringBuilder append(Object obj) { 中的實(shí)現(xiàn)是
          if (str == null) str = "null";

          看到這些夠明白了吧,也就不應(yīng)該覺(jué)得奇怪。既然 JDK 有源碼,碰到問(wèn)題細(xì)究一下就簡(jiǎn)單了,光抓頭發(fā)是找不到答案的。

          另外是 StringBuffer 還是 StringBuilder 看你用的是什么 JDK 版本,JDK 1.4 是 StringBuffer,它們的差別類似于 HashMap 和 Hashtable 的差別。

            回復(fù)  更多評(píng)論   

          # re: java中奇怪的null 2008-08-29 11:48 feng

          樓上的給出解答了 謝謝 我平時(shí)其實(shí)從來(lái)不看源代碼,我很懶的   回復(fù)  更多評(píng)論   

          # re: java中奇怪的null[未登錄](méi) 2008-08-29 14:33 Matthew

          好像初學(xué)的時(shí)候就知道了,不過(guò)現(xiàn)在回過(guò)頭來(lái)看這個(gè)類似操作符重載的功能,感覺(jué)太另類了。  回復(fù)  更多評(píng)論   

          # re: java中奇怪的null 2008-08-30 14:03 ci

          ..........  回復(fù)  更多評(píng)論   

          # re: java中奇怪的null 2008-09-01 10:22 塔塔

          看來(lái)看源碼還是非常重要的啊,我很少去看,好像沒(méi)那個(gè)習(xí)慣.  回復(fù)  更多評(píng)論   

          # re: java中奇怪的null 2008-10-22 16:18 blue_sky

          從來(lái)沒(méi)有看過(guò)源碼哎,看來(lái)還是不行啊啊。。  回復(fù)  更多評(píng)論   

          # re: java中奇怪的null 2009-02-03 01:41 wo654654

          tyhftghut jyh  回復(fù)  更多評(píng)論   

          # re: java中奇怪的null 2009-02-21 21:21 acssccc

          立刻的 咖啡堿內(nèi)就風(fēng)疹塊機(jī)   回復(fù)  更多評(píng)論   



          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 贵阳市| 新巴尔虎右旗| 郸城县| 虹口区| 门源| 额济纳旗| 栾城县| 固原市| 碌曲县| 紫金县| 连城县| 新闻| 高州市| 左权县| 同心县| 定南县| 花莲县| 周宁县| 青海省| 武强县| 康定县| 剑河县| 克拉玛依市| 漯河市| 耒阳市| 盐边县| 渝中区| 贵南县| 琼中| 托克逊县| 黄大仙区| 和平区| 苗栗市| 冕宁县| 惠来县| 赣榆县| 彩票| 惠州市| 额尔古纳市| 屏边| 廉江市|