1

我现在正在学习 Java,但我对常量感到困惑。它在我的书中说,它们很适合声明一个不变的变量。示例是:

final double PI = 3.14159

这与

double pi = 3.14159

程序中的“pi”将如何变化?

4

8 回答 8

5

关键字使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
于 2013-08-21T14:07:28.260 回答
0

一旦你发现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!!!
于 2013-08-21T14:29:30.277 回答
0

final意味着变量的值不能改变。

因此将不接受以下代码:

final double PI = 3.14159;
PI = 3.14;  //error because PI is declared as final
于 2013-08-21T14:13:17.257 回答
0

将其设为常量的目的是让您或其他程序员不会错误地更改该值。Pi 不能更改它向编译器/解释器声明任何更改它的尝试都是不可接受的。

于 2013-08-21T14:26:58.330 回答
0
final double PI = 3.14159
PI = 2; // Compile error

double pi = 3.14159
pi = 2; // Works fine

最终字段在初始化后无法修改。它们在构造函数被调用时被初始化,并在对象的剩余生命周期中保持它们的值。

于 2013-08-21T14:08:28.097 回答
0

你肯定可以定义pi为标准double。事实上,如果你正在定义,PI那么它需要是一个double(或BigDecimal取决于你的使用)。

关键字意味着这个final值不会改变。它使您的代码更具可读性。像这样看:

final double PI = 3.14;

double a = Math.pow(PI * radius, 2);

您看到您正在使用的价值是如何立即显而易见PI的,而不是3.14在任何情况下都可能意味着任何事情?

于 2013-08-21T14:08:42.620 回答
0

阅读语言规范 jls #4.12.4

变量可以声明为final。最终变量只能分配一次。声明一个变量 final 可以作为有用的文档,说明它的值不会改变,并且可以帮助避免编程错误。

于 2013-08-21T14:08:58.997 回答
0

声明一个常量的原因是为了确保它不能被改变。如果在你的代码中,你试图改变它的值,你会得到一个错误(我认为,在 Java 上有点生疏,说实话)

虽然,在我的脑海中,我想不出一个常量不能声明为变量的情况,它使代码更清晰,并防止你或其他编码人员意外更改不应该的值改变了。

于 2013-08-21T14:09:02.887 回答