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

のように見える場合、新しい配列が作成されますdstPtsnullでも、この配列は外には返ってこないですよね?

4

3 に答える 3

3

注意: Java は常に値渡しです。一番下の小さな行は、オブジェクトをパラメーターとして渡す場合、その参照は実際に渡される値であるということです。

たとえば、C# にはrefキーワードがあり、参照を渡すことができます。Java では、オブジェクトを一種のコンテナーにラップし、コンテナーを操作する必要があるため、基になる要素を自由に切り替えることができます。

あなたが言うように、新しい配列は返されない限り、外部からアクセスできません。以下がNPEをスローしないようにするために行われたことは理解していますwhileが、実際にはメソッドがコーディングされているため、処理結果が失われます。

于 2013-11-14T19:05:14.103 に答える
2

それが実際のコードであれば、その通りです。メソッドを使用しているときに、人々がパラメーターとして null を渡していないと思いますが、それでもそれはバグです。

于 2013-11-14T18:54:44.823 に答える
0

配列はオブジェクトであり、その参照は値によって渡されます。

于 2013-11-14T19:00:09.323 に答える