我从“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/