我从“Java. How to Program”一书中学习 Java P. & H. Deitel
在第 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/

10-12 22:52