话题9 i+++j的计算---贪心规则
2015-11-22 15:22
489 查看
在C/C++中,i+++j的实现顺序会依赖于硬件结构,不同的环境会有不同的结果。不过在JAVA中,这个结果是固定的,不受其运行的硬件环境和平台影响。
package chapter2;
public class PlusPlus {
public static void main(String[] args) {
int i = 10;
int j = 20;
int k = i++ + j;
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}
运行结果如下:
这种结合性归根于编译器的贪心规则,即在分析符号的时候,编译器会尽可能多的结合有效的符号。
2.编译器在分析字符的时候,会尽可能多的对有效字符进行结合,并且过度的贪心,而不管这种贪心是否符合语法规则。
1 . i+++j的结合规则
首先看程序:package chapter2;
public class PlusPlus {
public static void main(String[] args) {
int i = 10;
int j = 20;
int k = i++ + j;
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}
运行结果如下:
11 20 30分析可知,i+++j的结合顺序为(i++)+j。
这种结合性归根于编译器的贪心规则,即在分析符号的时候,编译器会尽可能多的结合有效的符号。
2 . 为何贪心?
看下列代码:package chapter2; public class Greedy { public static void main(String[] args) { String s = "\17"; System.out.println(s); System.out.println(s.length()); s = "\171"; System.out.println(s); System.out.println(s.length()); s = "\1717"; System.out.println(s); System.out.println(s.length()); s = "\43"; System.out.println(s); System.out.println(s.length()); s = "\431"; System.out.println(s); System.out.println(s.length()); } }运行结果:
1 y 1 y7 2 # 1 #1 2应该是编码问题,在运行结果的第一个1之前有一个符号没有显示出来。暂且不管他。其实贪心规则是有用的。根据贪心规则,编译器会尽可能多的对有效字符进行结合。由于八进制的有效范围为\0-\377,因此,\1717就会被解析为\171和7,从而字符长度为2。同理\431会被解析为\43和1。
3 . 小结
1.贪心规则是有用的,因为这样可以对转义字符等进行特殊处理。2.编译器在分析字符的时候,会尽可能多的对有效字符进行结合,并且过度的贪心,而不管这种贪心是否符合语法规则。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统