0

我在库中的类方法中找到了以下代码:transformPerspectiveTransformJAI

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;
            }
        }
    }

看起来 if dstPtsis null,然后创建新数组。但是这个数组不会返回外面,不是吗?

4

3 回答 3

3

请注意:Java 总是按值传递。底部的小线是当你将一个对象作为参数传递时,它的引用就是实际传递的值。

例如,C# 具有ref允许传递引用的关键字。在 Java 中,您必须将对象包装在某种容器中并使用该容器,这样您就可以自由切换底层元素。

正如您所说,除非返回新数组,否则将无法从外部访问新数组。我知道这样做是为了防止以下内容while引发 NPE,但是由于该方法实际上是编码的,因此处理结果会丢失。

于 2013-11-14T19:05:14.103 回答
2

你是对的,如果那是实际的代码。我想人们在使用该方法时不会将空值作为参数传递,但即便如此,这也是一个错误。

于 2013-11-14T18:54:44.823 回答
0

数组是对象,它们的引用是按值传递的。

于 2013-11-14T19:00:09.323 回答