理解final变量

6
假设一个类包含一个 final 变量。为什么每次创建该类对象时都会为 final 变量分配新空间,即使它的值无法更改? 为什么它的内存分配不像静态变量一样呢?

9
由于类的每个实例可能具有该变量的不同值。 - khelwood
你可以使用多态吗? - bakero98
3个回答

14

考虑这个例子:

public class Example {
    public final int someNum;
    // constructor
    public Example(int n) {
        someNum = n;
    }
}

在这个例子中,尽管someNum是一个final变量,但是该类的每个对象可能具有不同的值。因此,对于类的每个实例都必须分配新的空间。


这可能是一个愚蠢的问题。我们将someNum定义为final。但它仍然没有为每个对象假定不同的值。如果它是final,那么它怎么会有不同的值呢? - Vishnu Dahatonde
1
@VDevD someNum 只会保存一个值。但是,如果你构造三个不同的类实例,每个实例都可以有一个不同的 someNum 值。 - GBlodgett

5

虽然您无法将新值分配给 final 变量,但类的每个实例都可以具有不同的值,因此每个实例都需要为其自己的成员分配自己的内存。


3
在Java中,对于final变量,在声明时没有必要赋值。final变量可以在后面被赋值,但只能被赋值一次。由于不同的值需要不同的内存分配,因此需要重新分配内存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接