feng

          飄逸~~~~~life

          java中奇怪的null

          項目開發測試中發現一個問題,后來發現是null在作怪,看看這個程序
          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("怎么變出來的");
            }
           }

          }

          大家可以運行一下,結果是

          null
          null
          怎么回事
          怎么變出來的
          很奇怪吧? 也就是不管是一個普通對象的null還是一個String對象的null  ,如果進行""+null這樣的操作的話
          都變成了一個"null"字符串,大家記住吧,開發中考慮這個問題,省得實際項目出錯,知道為什么的,可以解釋一下,xiexie!

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

          Feedback

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

          普通對象的 null 還是 String 對象的 null,它們都是 null,都一樣的

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

          這時候你就要看這兩個方法的實例了:
          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) { 中的實現是
          if (str == null) str = "null";

          看到這些夠明白了吧,也就不應該覺得奇怪。既然 JDK 有源碼,碰到問題細究一下就簡單了,光抓頭發是找不到答案的。

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

            回復  更多評論   

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

          樓上的給出解答了 謝謝 我平時其實從來不看源代碼,我很懶的   回復  更多評論   

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

          好像初學的時候就知道了,不過現在回過頭來看這個類似操作符重載的功能,感覺太另類了。  回復  更多評論   

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

          ..........  回復  更多評論   

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

          看來看源碼還是非常重要的啊,我很少去看,好像沒那個習慣.  回復  更多評論   

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

          從來沒有看過源碼哎,看來還是不行啊啊。。  回復  更多評論   

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

          tyhftghut jyh  回復  更多評論   

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

          立刻的 咖啡堿內就風疹塊機   回復  更多評論   



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 漾濞| 疏勒县| 罗江县| 泉州市| 衡东县| 宿松县| 大城县| 来凤县| 嘉禾县| 阳新县| 洛扎县| 宿松县| 荆州市| 中江县| 融水| 翁牛特旗| 陵水| 陕西省| 苏尼特左旗| 新营市| 神池县| 屯门区| 集贤县| 高碑店市| 北辰区| 古浪县| 正阳县| 汤原县| 景宁| 沾化县| 达拉特旗| 长顺县| 梁山县| 江城| 衡山县| 合作市| 大丰市| 安多县| 海淀区| 永新县| 昭平县|