Java - 编译器的贪心规则

来源:互联网 发布:如何修改手游数据视频 编辑:程序博客网 时间:2024/04/29 20:12

三个加号连加,i+++j,是按照i+(++j)运算还是(i++)+j运算呢?这个问题在类似于C/C++中讨论时没有多大意义的,因为C/C++依赖于实现的硬件结构,不同的环境结果也会不同。不过在Java中,这个结果是固定的,不受硬件环境和平台影响。这个问题的结果是后者。

这种结合性归根于编译器的贪心规则,也就是说,在分析符号的时候,编译器会尽可能多地结合有效的符号,例如上面的表达式:“+” 和“++”都是有效地符号,但是“+++”不是有效的符号,因此,经过分析后,最终将表达式解析为:+++

这种贪心规则不会考虑结合后语法的规则。比如:a-- b,我们原意是a 减去–b,但是由于”--”是有效的符号,所以编译器会解析为 a-- b,这样就不符合语法规则了,所以产生了编译错误。

这种贪心规则在对转义字符等进行处理时候是很有用的。

public static void main(String args[]) {String s;s = "\43";System.out.println(s + " 长度: " + s.length());s = "\431";System.out.println(s + " 长度: " + s.length());}
最后输出为:

# 长度: 1
#1 长度: 2

因为贪心规则,编译器会尽可能多地对有效字符进行结合。八进制转义字符的取值范围\0 - \377,所以\43转义的时候就是(\43),而\431就对应(\43)1。

所以,如果要转义4 和 3对应的字符,那么就应该写:"\4\3"。


0 0
原创粉丝点击