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
- Java - 编译器的贪心规则
- 编译器的符号修饰规则
- 交叉编译器的命名规则
- 编译器规则
- C++ 编译器的函数名修饰规则
- C++ 编译器的函数名修饰规则
- C++ 编译器的函数名修饰规则
- C++ 编译器的函数名修饰规则
- C++ 编译器的函数名修饰规则
- C++ 编译器的函数名修饰规则
- C++ 编译器的函数名修饰规则
- 编译器的函数名修饰规则
- C++ 编译器的函数名修饰规则
- C++ 编译器的函数名修饰规则
- 非内建数据类型的编译器对其规则
- C++ 编译器的函数名修饰规则
- 贪心法-c语言的规则
- Java编译器的流程图
- struts2 Interceptor怎么写
- 解决crontab无法读取环境变量
- POJ 2001 Shortest Prefixes(字典树)
- Linux DebugFS 子目录也是用debugfs_create_dir来实现
- java进制转换
- Java - 编译器的贪心规则
- 经纬财富:巢湖头肩顶形态如何交易
- Unexpected text found in layout file: """
- 智力测试---20140731
- HDU 1969 Pie(二分查找)
- SharePoint 2013 托管导航及相关配置
- 插入Java小程序在Dreamweaver
- spring 配置事务
- Android中Adapter之SimpleCursorAdapter使用