第 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。
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
李四飛刀 閱讀(1275)
評論(2) 編輯 收藏 所屬分類:
每日一題