我正在尝试确定创建对象时使用的变量是否在Java中持续存在。
具体来说,我正在看BigInteger。如果我正确地读取代码,它看起来不是在逐位基础上进行添加等,而是将数字分解为32位字,这样可以更快地操作。我无法弄清楚的是,每当在BigInteger上使用某个方法时,是否必须创建这个32位字表示和其他变量(mag [],signum等),或者它是否以某种方式保留在缓存中并保持关联一旦创建了它们,就会使用它们的特定BigInteger。
答案 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 }
您引用的mag
和signum
是BigInteger
的每个实例中的字段。它们不按需计算,它们是BigInteger
实现的部分。他们的访问方法(不函数调用)表明它只是访问存储位置。