假设一个类包含一个 final 变量。为什么每次创建该类对象时都会为 final 变量分配新空间,即使它的值无法更改? 为什么它的内存分配不像静态变量一样呢?
考虑这个例子:
public class Example {
public final int someNum;
// constructor
public Example(int n) {
someNum = n;
}
}
在这个例子中,尽管someNum
是一个final
变量,但是该类的每个对象可能具有不同的值。因此,对于类的每个实例都必须分配新的空间。
someNum
只会保存一个值。但是,如果你构造三个不同的类实例,每个实例都可以有一个不同的 someNum
值。 - GBlodgett虽然您无法将新值分配给 final
变量,但类的每个实例都可以具有不同的值,因此每个实例都需要为其自己的成员分配自己的内存。