我正在尝试弄清楚在创建对象时使用的变量是否在Java中仍然存在。

具体来说,我在看BigInteger。如果我正确地阅读了代码,则看起来不是逐位进行加法运算,而是将数字分解为32位字,从而可以更快地进行操作。我无法弄清楚的是,是否每次在BigInteger上使用方法时是否都必须创建此32位字表示形式和其他变量(mag [],signum等),或者是否必须以某种方式将它们保留在缓存中并保持关联创建特定的BigInteger时。

最佳答案

我猜你在看这段代码:

 1054    public BigInteger add(BigInteger val) {
 1055         int[] resultMag;
 1056         if (val.signum == 0)
 1057             return this;
 1058         if (signum == 0)
 1059             return val;
 1060         if (val.signum == signum)
 1061             return new BigInteger(add(mag, val.mag), signum);
 1062
 1063         int cmp = intArrayCmp(mag, val.mag);
 1064         if (cmp==0)
 1065             return ZERO;
 1066         resultMag = (cmp>0 ? subtract(mag, val.mag)
 1067                            : subtract(val.mag, mag));
 1068         resultMag = trustedStripLeadingZeroInts(resultMag);
 1069
 1070         return new BigInteger(resultMag, cmp*signum);
 1071     }


您引用的magsignum是每个BigInteger实例中的字段。它们不是按需计算的,它们是BigInteger实现的一部分。他们的访问方法(不是函数调用)表明它只是在访问存储位置。

关于java - Java,与对象关联的变量是否持久? BigInteger示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18154962/

10-10 18:29
查看更多