第一段代码不能通过,是由于y可能没有被初始化,没有初始化不可以被输出语句使用!加上else语句,else之中再对y进行赋值的话,编译可以通过,说明编译器可以知晓判断语句的结果!大家的表述也很清楚;
第二段代码能通过的原因在于,final修饰x之后,x就代表常量100!编译器对常量的处理:在编译时,直接用常量值替代常量符号!所以第二段代码的判断语句在编译时期相当于:所以编译时,y肯定是被初始化过的,所以编译可以通过!
第三段代码不能通过!其实是编译器没办法确定x做为常量的常量值而造成的!
第三段代码其实跟下面代码的效果完全相同- final int x;
- int y,z=100;
- x = z;
- if(x > 30) {
- y = -1;
- }
- System.out.println(y);
复制代码 也就是x作为常量但是常量值不确定,所以判断语句的执行结果不确定,y也存在没有被初始化的可能!
导致编译不能通过! |