隨筆 - 9  文章 - 21  trackbacks - 0
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類(9)

          隨筆檔案(9)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          第 4 天的問題 -- 眼花繚亂

          它又會打印出什么呢?

          
          public class Elementary{
              public static void main(String[] args){
                  System.out.println(12345 + 5432l);
              }
          }
          
          

          第 4 天問題的解答

          這個題看起來似乎太簡單了。結果不就是66666嗎?

          遺憾的告訴你,結果是17777。

          原因

          事物往往有別于它的表象。就以這個問題為例,它并沒有打印出我們想要的輸出。請仔細觀察 + 操作符的兩個操作數, 我們是將一個int類型的12345加到了long類型的5432l上。請注意左操作數開頭的數字1和右操作數結尾的小寫字母l之間的細微差異。 數字1的水平筆劃(稱為"臂(arm)")和垂直筆劃(稱為"莖(stem)")之間是一個銳角,而與此相對照的是,小寫字母l的臂和莖之間是一個直角。

          解決辦法

          System.out.println(12345+5432L);
          

          用大寫的L替換小寫字母l。

          第 4 天問題的總結

          在你大喊"惡心!"之前,你應該注意到這個問題確實已經引起了混亂,這里確實有一個教訓: 在long型字面常量中,一定要用大寫的L,千萬不要用小寫的l。這樣就可以完全掐斷這個謎題所產生的混亂的源頭。

          相類似的,要避免使用單獨的一個l字母作為變量名。例如,我們很難通過觀察下面的代碼段來判斷它到底是打印出列表l還是數字1。

          //不良代碼-使用了l作為變量名
          List l = new ArrayList<String>();
          l.add("Foo");
          System.out.println(1);
          

          也許當初允許用小寫的l來編寫long型字面常量本身就是一個錯誤。


          今天的問題

          下面的程序是對兩個十六進制(hex)字面常量進行相加,然后打印出十六進制的結果。這個程序會打印出什么呢?

          public class JoyOfHex {
              public static void main(String[] args) {
                  System.out.println(Long.toHexString(0x100000000L + 0xcafebabe));
              }
          }
          
          posted on 2008-05-17 00:33 李四飛刀 閱讀(1276) 評論(2)  編輯  收藏 所屬分類: 每日一題

          FeedBack:
          # re: 第 5 天: 解答 -- 眼花繚亂, 問題 -- 16進制的趣事 2008-05-17 17:09 ztc
          哈哈,我的確喊惡心了,不過說得有道理!  回復  更多評論
            
          # re: 第 5 天: 解答 -- 眼花繚亂, 問題 -- 16進制的趣事 2008-05-26 14:03 懶人
          要都是那么寫,調bug都得得近視~~  回復  更多評論
            
          主站蜘蛛池模板: 永康市| 苗栗县| 贵阳市| 银川市| 黄浦区| 荆州市| 金沙县| 和林格尔县| 靖边县| 丹阳市| 龙岩市| 江都市| 固安县| 理塘县| 江津市| 淅川县| 沭阳县| 墨脱县| 肥东县| 红河县| 绩溪县| 楚雄市| 微博| 大足县| 皋兰县| 吉安县| 同德县| 黄浦区| 宁南县| 工布江达县| 自贡市| 永登县| 云龙县| 宜兰县| 黔西| 抚宁县| 鹰潭市| 安阳市| 安陆市| 萍乡市| 修武县|