BigInteger.ValueOf()返回缓存的对象?

Deb*_*was 1 java numbers biginteger

我写了一个测试代码来检查相等性.我检查过Java doc,它说BigInteger是不可变的.检查静态工厂方法的文档,valueOf它看起来像返回已经缓存的不可变实例.那么为什么==在缓存的实例时返回false.

以下是适用valueOf于的Java文档BigInteger:

返回一个Big Integer,其值等于指定long的值.这种"静态工厂方法"优先于(长)构造函数提供,因为它允许重用常用的BigIntegers.

下面的代码将进入无限循环.

public static void main(String[] args) {
    while(true) {
        BigInteger a = BigInteger.valueOf(100);
        BigInteger c = BigInteger.valueOf(100);
        if (a == c) {
            break;
        }
 }
Run Code Online (Sandbox Code Playgroud)

Jim*_*son 7

不可变仅表示实例化后值不能更改.

具体而言,这并不意味着JVM必须确保您创建的每个值只有一个副本.您可以创建许多具有相同内部状态的不可变对象,但它们仍然是不同的对象.比较这些==将返回,false同时equals()将返回true.