当前位置:  开发笔记 > 编程语言 > 正文

为什么Java语言规范说表达式(n> 2)不是常量表达式?

如何解决《为什么Java语言规范说表达式(n>2)不是常量表达式?》经验,为你挑选了1个好方法。

在" 定义分配的Java语言规范"一章中,例16-2说明了这一点

Java编译器必须为代码生成编译时错误:

{
    int k;
    int n = 5;
    if (n > 2)
        k = 3;
    System.out.println(k);  /* k is not "definitely assigned"
                               before this statement */ 
}

即使n的值在编译时是已知的,并且原则上在编译时可以知道对k的赋值将始终被执行(更恰当地,被评估).Java编译器必须按照本节中规定的规则运行.规则只承认不变的表达; 在此示例中,表达式n> 2不是§15.28中定义的常量表达式.

但是,如果我们看看§15.28,那就说明了

关系运算符<,<=,>和> =

可以有助于持续表达.

表达式是否是n > 2一个常量表达式?我们怎样才能确定这一点?



1> Sotirios Del..:

它说是因为n不是一个恒定的表达.

常量表达式是表示基本类型的值的表达式,或者String不突然完成的表达式,仅使用以下内容组成:

[...]

引用常量变量的简单名称(第6.5.6.1节)(§4.12.4).

常量变量是使用常量表达式初始化final的基本类型或类型的变量 String(第15.28节).

n不是final,因此不是一个恒定的变量.因此,它不是一个恒定的表达.因此n < 2不是一个恒定的表达.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有