我很难理解如何在不使用文字的情况下定义常量。 final int A = 1 + 1
是否计算?
答案 0 :(得分:4)
Java语言规范定义Constant Expressions。第一项是“原始类型的文字和字符串类型的文字”,因此这些文字也是常量。同样,它列出了“引用常量变量的简单名称(§6.5.6.1)”。但是,还有许多其他形式的表达式仅使用某些运算符组成,这些运算符也被定义为常量表达式。有关完整规则,请参阅链接部分。
答案 1 :(得分:1)
常量是一个不会改变的值:
int getRandomNumber() {
//chosen by a fair dice roll, guaranteed to be random
return 4; //<- literal
}
public final int random = getRandomNumber(); //<- constant
<子> XKCD 221 子>
此处random
不是文字,因为它是方法调用的结果。但是,它是一个常量,因为它被声明为final
。
Java的文字数量有限:
String a = "a"; // string literal
int three = 3; // number literal
int[] manyThree = {3,3,3}; //an array literal consisting of number literals
但任何变量都可以通过声明final
来保持常量。
答案 2 :(得分:1)
好吧,你可以轻松拥有一个非文字常量。拿这个:
public class A {
public static final int A_CONSTANT = new java.util.Random().nextInt();
}
A.A_CONSTANT
肯定是常量 - 它是final
和static
,所以一旦加载了这个类,它就不会改变!但是,它不是文字 - 它在运行时是常量,而不是编译时。每次加载A
时,A_CONSTANT
都会有一个新的常量值,而文字4
总是恰好为4。
答案 3 :(得分:0)
文字不是常量,它是常数。 (不带a)常量是可以用文字表示的值的名称。 (或另一个常数)