在Java中,我们使用带有变量的final关键字来指定其值不可更改.

以下是代码:

import java.util.ArrayList;
import java.util.List;

class Test {
  private final List foo;

  public Test()
  {
      foo = new ArrayList();
      foo.add("foo"); // Modification-1
  }
  public static void main(String[] args) 
  {
      Test t = new Test();
      t.foo.add("bar"); // Modification-2
      System.out.println("print - " + t.foo);
  }
}

以上代码运行良好,没有错误.

现在将变量更改为static:

private static final List foo;

现在它是一个编译错误.这final美元到底是怎么运作的呢?

推荐答案

始终允许您输入final个变量.编译器确保您只能执行一次.

请注意,对存储在final变量中的对象调用方法与final的语义无关.换句话说:final只与引用本身有关,与被引用对象的内容无关.

Java没有对象不变性的概念;这是通过仔细设计对象来实现的,这绝非小事.

Java相关问答推荐

在Spring Boot中测试时出现SQL语法错误

无法在Java中将hhmmss格式的时间解析为LocalTime

方法没有用正确的值填充数组—而是将数组保留为null,'

使用Java Streams API比较两个不同的Java集合对象和一个公共属性

neo4j java驱动程序是否会在错误发生时自动回滚事务?

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

嵌入式ActiveMQ Artemis Web控制台加载错误

只需最少的代码更改即可将版本号标记添加到日志(log)

RichFaces 3.x-Spring Boot-迁移web.xml

如何正确创建序列图?

由于 list 中的权限错误,Android未生成

如何将Java文档配置为在指定的项目根目录中生成?

我怎样才能让IntelliJ标记toString()的任何实现?

当构造函数创建一个新实例时,Java为什么需要&new";

Android Studio模拟器没有互联网

为什么mvn编译生命周期阶段不只是编译已更改的java文件?

在Java中将.GRF转换为图像文件

H2数据库仅支持%1个结果集?

Spring Mapstruct如何获取Lazy初始化实体字段的信息?

如何在更改分辨率时将鼠标坐标计算为世界坐标