有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组在Java中会通过引用返回吗?

IfoundJAI库中^{}类的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;
            }
        }
    }

看起来,如果dstPtsnull,则会创建新数组。但是这个数组不会返回外部,不是吗


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

    正如您所说,除非返回新阵列,否则无法从外部访问它。我知道这样做是为了防止下面的while抛出NPE,但是处理结果会丢失,因为方法实际上是编码的

  3. # 3 楼答案

    数组是对象,它们的引用是通过值传递的