请帮助我理解Java中常量变量和final
变量之间的区别。我有点困惑。
答案 0 :(得分:25)
常量是概念,即变量的属性。
final
是声明常量变量的java关键字。
正如其他人所指出的那样,从语义/语言学的角度来看,表达式常量变量是矛盾的,因此,我们可以争论它的正确性。
引用specification,无论如何,我们可以阅读
原始类型的变量[...],是最终的并使用编译时常量表达式(第15.28节)初始化,称为常量变量。
因此,我想,为了我们的目的,我们可以接受(并考虑正确)这个二项式。
答案 1 :(得分:7)
Constant
不是Java中的关键字。
这是使任何变量保持不变的概念。为此,我们在Java中使用final
关键字,以便在使用final关键字初始化变量后,没有人可以重新分配该变量的值。
答案 2 :(得分:4)
现实世界中有几个永远不会改变的价值观。一个正方形总是有四个边,PI到三个小数位总是3.142,一天总是有24个小时。这些值保持不变。在编写程序时,以相同的方式表示它们是有意义的 - 作为一旦将它们分配给变量就不会被修改的值。这些变量称为常数。
将变量声明为常量
在声明变量时,我表明很容易为int变量赋值:
int hoursInADay = 24;
我们知道这个价值永远不会在现实世界中改变,所以我们确保它不会在程序中。这是通过添加关键字修饰符final
:
final int HOURS_IN_A_DAY = 24;
除了final
关键字之外,您应该注意到变量名称的大小已根据标准Java命名约定更改为大写。这样可以更容易地发现代码中哪些变量是常量。
如果我们现在尝试更改HOURS_IN_A_DAY
的值:
final int HOURS_IN_A_DAY = 24;
HOURS_IN_A_DAY = 36;
我们将从编译器中得到以下错误:
无法为最终变量HOURS_IN_A_DAY
指定值
任何其他原始数据类型变量都是如此。要将它们变成常量,只需在其声明中添加final
关键字。
声明常量的位置
与普通变量一样,您希望将常量的范围限制为使用它们的位置。 如果只在方法中需要常量的值,则在那里声明:
public class Hours {
public static final int HOURS_IN_A_DAY = 24;
}
答案 3 :(得分:0)
设置变量“ final
”意味着我们无法将值重新分配给该变量(即,我们只能使用一次variable = Something
。
因此对于原始数据,我们可以说最终变量是常量。
但是最终变量可以是非常数。 例如
final Stringbuffer string = new StringBuffer("not");
string.append(" constant");
System.out.println(string);
将打印字符串“ not constant”。在这里,“字符串”变量是最终变量,但不是常数。 我希望这会有所帮助