我正在尝试弄清楚在创建对象时使用的变量是否在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 }
您引用的
mag
和signum
是每个BigInteger
实例中的字段。它们不是按需计算的,它们是BigInteger
实现的一部分。他们的访问方法(不是函数调用)表明它只是在访问存储位置。关于java - Java,与对象关联的变量是否持久? BigInteger示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18154962/