第 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
李四飞刀 阅读(1268)
评论(2) 编辑 收藏 所属分类:
每日一题