常量对象与不可变对象

2022-09-04 08:07:58

我可以使用术语“常量对象”代替术语“不可变对象”吗?虽然我感觉对象的不可变性就是变量的常量,但我不确定这个术语是否被接受。请帮我理解。

谢谢,卡西克·


答案 1

事实上,在Java中,术语常量没有定义的含义。它只出现在JLS中较大的术语编译时常量表达式中,该表达式可以(并且必须)由编译器而不是在运行时计算。(关键字被保留,以允许编译器提供更好的错误消息。const

在Java中,我们使用术语final来指代无法更改的变量(无论是类,对象还是局部变量),当我们引用无法更改的对象时,它是不可变的。两者都可以在谈论变量时使用 - 第一个表示变量本身(意味着它不能切换到另一个对象),第二个表示变量后面的对象。因此,这里的两个含义是正交的,并且经常组合在一起以创建“真正的常数”。x


答案 2

我会把常量理解为相同的对象(相同的引用),而不可变对我来说显然意味着对象不会改变。

由于这是两回事,我也许可以参考一下:

private final Immutable i = new Immutable();

作为一个常量的不可变对象。