数组在Java中会通过引用返回吗?
Ifound在JAI
库中^{transform
方法中的以下代码:
public void transform(double[] srcPts, int srcOff,
double[] dstPts, int dstOff,
int numPts) {
if ( srcPts == null ) {
throw new IllegalArgumentException(JaiI18N.getString("Generic0"));
}
if (dstPts == null) {
dstPts = new double[numPts * 2 + dstOff];
}
while (numPts-- > 0) {
double x = srcPts[srcOff++];
double y = srcPts[srcOff++];
double w = m20 * x + m21 * y + m22;
if (w == 0) {
dstPts[dstOff++] = x;
dstPts[dstOff++] = y;
} else {
dstPts[dstOff++] = (m00 * x + m01 * y + m02) / w;
dstPts[dstOff++] = (m10 * x + m11 * y + m12) / w;
}
}
}
看起来,如果dstPts
是null
,则会创建新数组。但是这个数组不会返回外部,不是吗
# 1 楼答案
你是对的,如果这是实际代码的话。我想象人们在使用该方法时不会将null作为参数传递,但即便如此,这也是一个bug
# 2 楼答案
请注意:Java总是按值传递。底部的一小行是,当您将对象作为参数传递时,它的引用就是实际传递的值
例如,C#有
ref
关键字,它允许传递引用。在Java中,您必须将对象包装在某种容器中并使用容器,以便可以自由切换底层元素正如您所说,除非返回新阵列,否则无法从外部访问它。我知道这样做是为了防止下面的
while
抛出NPE,但是处理结果会丢失,因为方法实际上是编码的# 3 楼答案
数组是对象,它们的引用是通过值传递的