您的位置:首页 > 编程语言 > Java开发

话题9 i+++j的计算---贪心规则

2015-11-22 15:22 489 查看
    在C/C++中,i+++j的实现顺序会依赖于硬件结构,不同的环境会有不同的结果。不过在JAVA中,这个结果是固定的,不受其运行的硬件环境和平台影响。

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 贪心规则