《Java解惑》系列——01表达式之谜——谜题04:初级问题

探讨了Java中使用小写字母'l'作为long类型字面量标识带来的问题,并通过实例说明如何正确区分数字1与小写字母'l',强调使用大写字母'L'的重要性。

知识点:

在命名变量的时候不要使用英文字母“l”(L的小写)、“o”(字母‘欧’),因为你很难判断他是数字‘一’还是‘零’。


问题:

下面的代码会打印什么?


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

// 预期结果:66666
// 实际结果:17777

结果是不是出乎大家的意料呢?的确如此。
产生这个结果的原因:


从表面上看,这像是一个很简单的谜题——简单到不需要纸和笔你就可以解决
它。加号的左操作数的各个位是从1 到5升序排列的,而右操作数是降序排列的。
因此,相应各位的和仍然是常数,程序必定打印66666。对于这样的分析,只有
一个问题:当你运行该程序时,它打印出的是 17777。难道是 Java 对打印这样
的非常数字抱有偏见吗?不知怎么的,这看起来并不像是一个合理的解释。  
事物往往有别于它的表象。就以这个问题为例,它并没有打印出我们想要的输出。
请仔细观察 + 操作符的两个操作数,我们是将一个 int类型的 12345加到了
long类型的5432l 上。请注意左操作数开头的数字1 和右操作数结尾的小写字
母l 之间的细微差异。数字1 的水平笔划(称为“臂(arm)”)和垂直笔划(称
为“茎(stem)”)之间是一个锐角,而与此相对照的是,小写字母l 的臂和茎
之间是一个直角。  
在你大喊“恶心!”之前,你应该注意到这个问题确实已经引起了混乱,这里确
实有一个教训:在long型字面常量中,一定要用大写的L,千万不要用小写的l。
这样就可以完全掐断这个谜题所产生的混乱的源头。
 


解决方法:

在long型字面常量中,一定要用大写的L,千万不要用小写的l。


// 初级问题
public class Elementary{ 
    public static void main(String[] args){
        System.out.println(12345+5432L);
    }
}

总结:


总之,小写字母l和数字1 在大多数打字机字体中都是几乎一样的。为避免你的
程序的读者对二者产生混淆,千万不要使用小写的 l 来作为 long型字面常量的
结尾或是作为变量名。Java从C编程语言中继承良多,包括long型字面常量的
语法。也许当初允许用小写的 l 来编写long型字面常量本身就是一个错误。 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值