Java 中的 final 对象

2025年3月17日 | 阅读 3 分钟

在 Java 中,final 是一个关键字,它确保了原始类型、方法、变量类等的不变性。它被视为不可访问的修饰符。如果我们想使用 final 关键字,我们必须在变量、方法和类之前指定它。它限制了我们访问变量、方法和类。如果我们想让对象成为 final 怎么办?因此,在本节中,我们将讨论 **final 关键字与 Java 对象结合使用**。此外,我们将讨论 **final 对象与不可变对象之间的区别**。

Final 对象

如果我们对对象使用 final 关键字,这意味着引用不能被更改,但它的状态(实例变量)可以被更改。

将对象引用变量声明为 final 与 final 变量略有不同。在这种情况下,对象字段可以更改,但引用不能更改。请注意,它也适用于集合。

当一个集合被标记为 final 时,这意味着只有它的引用不能被更改,但值可以被添加、删除或修改。

以下代码片段演示了如何声明 final 对象。

如果我们实例化 Demo 类,由于 obj 是 final 的,我们将无法为其属性分配其他值。

让我们通过一个 Java 程序来理解这个概念。

FinalObjectExample1.java

输出

The value is: 11

即使它被声明为 final,我们也可以轻松地获取和设置 final 对象的值。但以下操作是不允许的。

Final 对象与不可变对象

在 Java 中,final 对象和不可变对象并不相同。它们之间存在细微的差别。

Final

Java 中的 final 关键字用于变量、方法和类之前,使其不可变或不可更改。final 关键字限制用户使用变量、方法和类。它适用于所有类型的变量,如实例变量、静态变量和局部变量。当一个变量被声明为 final 并赋值后,我们就不能更改该变量的值。final 方法不能被子类覆盖。声明为 final 的类不能被扩展。对于 final 对象,**字段可以更改,但引用不能更改**。

注意:对于 final 对象,内存中的值是对对象的引用,而不是实际的对象。

不可变性

不可变性意味着一旦我们创建了一个对象,我们就不能更改该对象的内容。如果我们尝试更改内容并成功进行了修改,在这种情况下,将创建一个新对象。如果没有更改内容,将重用现有对象。

以下 Java 程序演示了 final 和不可变性的概念。

FinalObjectExample2.java

输出

Final Object in Java

在上面的 Java 程序中,我们观察到以下几点:

  1. 如果我们声明引用变量为 final,并不意味着对象本身是不可变的。
  2. 在代码的下一行,我们调用了 append() 方法,该方法成功地将字符串追加到了创建的对象中。如果对象是不可变的,该操作将无法执行。
  3. 但它执行成功了,因为我们声明了引用变量为 final,这意味着我们不能将任何东西重新分配给该引用变量。
  4. 因此,当我们尝试创建 StringBuffer 类的新对象时,它不会被创建,我们会得到一个编译时错误。

下一个主题Java OCR