java - 为什么这里使用final关键字?

标签 java

我从“Java.How to Program”P. & H. Deitel 一书中学习 Java 在第 216 页上有一个在变量之一中使用 final 的示例

private static final Random randomNumbers = new Random();

据我所知,在变量中声明 final 的意思是,该变量是一种常量,这意味着初始化时您不能再更改它。 但是上面的对象(变量)在程序中使用了两次以返回随机数

int die1 = 1 + randomNumbers.nextInt( 6 );
int die2 = 1 + randomNumbers.nextInt( 6 );

它返回 2 个不同的(随机)值。 我想我在这里丢失了一些东西。程序运行良好,但我不明白在对象声明中使用 final 的目的是什么?

最佳答案

final 意味着变量 不能在此处更改其值 - 事实上它不能也不会。

此处 randomNumbers 变量的值是对 Random 实例的引用。它指的是同一个实例,即使您每次调用 nextInt 时该实例产生(可能)不同的数字。

区分不改变值的变量和它引用的不改变内部状态的对象很重要。再举一个例子,你可以有这样的东西:

public class Person {
    private final List<Person> friends = new ArrayList<Person>();

    public void addFriend(Person friend) {
        friends.add(friend);
    }

    ...
}

这里我们只有一个列表 - 你永远不能更改 friends 以引用不同的对象 - 但我们仍然可以改变变量引用的列表。

关于java - 为什么这里使用final关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13562065/

相关文章:

JavaFX - 注册成功的反馈

java - 如何在 execSQL() 中使用变量?

java - 无法解析符号 setMinValue

java - 在 Scala 中使用 Java 泛型

java - JAVA 2D 列表中的循环

Java:如何知道 TIFF 图像是否为 Group4?

java - 如何在顶部移动列表的最后一个元素 N 次

java - Java 对象引用是如何工作的?

java - 使用 JAXB 将对象的内容放入不同类型的新实例中

java - 如何使用 ireport 显示 mysql 数据库中的虚线