【问题标题】:Store a reference to a single SecureRandom in Java?在 Java 中存储对单个 SecureRandom 的引用?
【发布时间】:2010-03-04 03:00:43
【问题描述】:

来自这里的 C++ 世界,因此问题的性质...

我想在 Java 应用程序中使用单个 SecureRandom 生成器,但我需要一个类的多个实例来在构造函数中存储对它的引用,而不是复制。

所以,

public class MyClass {
    private SecureRandom random;
    public MyClass(SecureRandom _random) { random = _random };
... }

这会导致对同一个生成器的引用,还是它的副本?副本的问题在于,如果 SecureRandom 是伪随机对象,例如 SHA1PRNG,则一个接一个地构造多个 MyClass 对象将导致相同的序列。我需要的是他们共享一个,这样对 random.nextBytes(...) 的调用序列将在每个 MyClass 实例中给我不同的结果。

(顺便说一句,每次在主应用程序中创建 SecureRandom 的新实例时,SHA1PRNG 是否保证以不同的方式播种,并且希望以比当时更安全的方式播种?)

【问题讨论】:

    标签: java reference random


    【解决方案1】:

    在 Java 中,任何不是原始类型(布尔、字符、字节、short、int、long、float、double)的东西都是引用类型。复制引用类型的唯一方法是通过克隆、序列化、复制构造等显式执行此操作。您没有使用 clone() 或其同类,也没有使用构造函数。你只是在做任务。这意味着您正在复制参考。

    【讨论】:

      【解决方案2】:

      同一个。 random 和 _random 是指向同一个对象的引用变量。

      【讨论】:

        猜你喜欢
        • 2020-05-24
        • 1970-01-01
        • 2016-05-25
        • 1970-01-01
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        相关资源
        最近更新 更多