Java,与对象关联的变量是否仍然存在? BigInteger示例

时间:2013-08-09 20:18:11

标签: java biginteger

我正在尝试确定创建对象时使用的变量是否在Java中持续存在。

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

2 个答案:

答案 0 :(得分:2)

这些只是普通的对象字段 - 它们 该对象的存储方式。它们不是“每次在BigInteger上使用方法时创建的” - 它们将从哪个创建? BigInteger 实现为该组字段;没有其他神奇的实现,他们是从中推断出来的。

答案 1 :(得分:2)

你正在看这段代码:

 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     }

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