Java对象中的BigInteger

时间:2013-12-09 22:06:56

标签: java biginteger

无论何时使用Java创建类的实例,该如何使用:

Class nameOfClass = new Class();

创建一个对象,然后可以通过在对象名称后面添加一个句点来调用它的方法。为什么在使用BigInteger时不需要使用new关键字或括号,并且可以这样创建一个新对象:

BigInteger first = BigInteger.valueOf(1);

我已经阅读了文档here,以及许多谷歌搜索,以找出原因为何无效。

5 个答案:

答案 0 :(得分:3)

这称为工厂方法。一个static方法,为您创建并返回一个新对象。

当你有很多方法来创建对象时,它们很方便,但实际上并不想过多地重载方法签名(即有大量不同的构造函数)

答案 1 :(得分:3)

这是一个静态factory method,它返回BigInteger的实例。

public static BigInteger valueOf(long val) 
{
         if (val == 0)
             return ZERO;

         if (val > 0 && val <= MAX_CONSTANT)
             return posConst[(int) val];

         else if (val < 0 && val >= -MAX_CONSTANT)
             return negConst[(int) -val];

         return new BigInteger(val);
}

请参阅,它要么返回new BigInteger(val),要么通过BigInteger数组实例成员返回已存在的BigInteger。作为参考,这是创建数组的静态块:

private static BigInteger posConst[] = new BigInteger[MAX_CONSTANT+1];
private static BigInteger negConst[] = new BigInteger[MAX_CONSTANT+1]
static 
{
    for (int i = 1; i <= MAX_CONSTANT; i++) 
    {
        int[] magnitude = new int[1];
        magnitude[0] = i;

        posConst[i] = new BigInteger(magnitude,  1);
        negConst[i] = new BigInteger(magnitude, -1);
     }
}

答案 2 :(得分:1)

这是一种静态工厂方法。一种静态方法,用于创建和返回新对象。因此,您可以创建一个内部调用static操作

new方法

答案 3 :(得分:1)

这是因为BigInteger.valueOf方法是一个静态工厂方法。这意味着该方法本身仅用于创建BigInteger的单个实例。此链接很好地描述了何时使用静态方法:Java: when to use static methods

答案 4 :(得分:1)

BigInteger使用factory method模式创建具有更有意义的方法名称的新实例。工厂方法还允许JVM重用通常可重用的值(例如1)的相同实例来节省内存。

顺便说一句,您可以使用new关键字来构造新实例,但构造函数会使用许多参数或字符串,这可能会造成混淆。