我现在正在学习 Java,但我对常量感到困惑。它在我的书中说,它们很适合声明一个不变的变量。示例是:
final double PI = 3.14159
这与
double pi = 3.14159
程序中的“pi”将如何变化?
我现在正在学习 Java,但我对常量感到困惑。它在我的书中说,它们很适合声明一个不变的变量。示例是:
final double PI = 3.14159
这与
double pi = 3.14159
程序中的“pi”将如何变化?
关键字使final
变量不可更改。这意味着您可以对其进行初始化,而您将永远无法更改它。
final double PI = 3.14159
PI = 2; //You are trying to change the value of a constant, this will result in a compile-time error
要更改变量的值,只需为该变量重新分配一个值:
double pi = 3.14159;
pi = 2; //pi is not a constant, so its value can be changed
一旦你发现anonymous inner class or method implementation\overriding
你就会意识到你的final
变量有什么好处。
的基本手段final
是保证对象的引用在对象构造后不会改变。
你可以这样做:
public class PI {
private double piValue;
public PI(double pi) {
this.piValue = pi;
}
public double getPi() { return piValue; }
public void setPi(double newPi) { piValue = newPi; }
}
//somewhere else
final PI myPi = new PI(3.14159);
//but you can change it via setter;
myPi.setPi(3.13);
//but myPi reference wont change!!!
final
意味着变量的值不能改变。
因此将不接受以下代码:
final double PI = 3.14159;
PI = 3.14; //error because PI is declared as final
将其设为常量的目的是让您或其他程序员不会错误地更改该值。Pi 不能更改它向编译器/解释器声明任何更改它的尝试都是不可接受的。
final double PI = 3.14159
PI = 2; // Compile error
double pi = 3.14159
pi = 2; // Works fine
最终字段在初始化后无法修改。它们在构造函数被调用时被初始化,并在对象的剩余生命周期中保持它们的值。
你肯定可以定义pi
为标准double
。事实上,如果你正在定义,PI
那么它需要是一个double
(或BigDecimal
取决于你的使用)。
关键字意味着这个final
值不会改变。它使您的代码更具可读性。像这样看:
final double PI = 3.14;
double a = Math.pow(PI * radius, 2);
您看到您正在使用的价值是如何立即显而易见PI
的,而不是3.14
在任何情况下都可能意味着任何事情?
变量可以声明为final。最终变量只能分配一次。声明一个变量 final 可以作为有用的文档,说明它的值不会改变,并且可以帮助避免编程错误。
声明一个常量的原因是为了确保它不能被改变。如果在你的代码中,你试图改变它的值,你会得到一个错误(我认为,在 Java 上有点生疏,说实话)
虽然,在我的脑海中,我想不出一个常量不能声明为变量的情况,它使代码更清晰,并防止你或其他编码人员意外更改不应该的值改变了。