java - Java中数组会按引用返回吗?

标签 java arrays pass-by-reference

foundPerspectiveTransformtransform 方法中的以下代码在 JAI 库中:

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,则创建新数组。但是这个数组不会返回到外部,不是吗?

最佳答案

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

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

正如您所说,除非返回新数组,否则无法从外部访问它。据我所知,这样做是为了防止以下 while 抛出 NPE,但处理结果会随着方法的实际编码而丢失。

关于java - Java中数组会按引用返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985928/

相关文章:

c++ - 通过引用将未知数组传递给函数 (C++)

c++ - 我试图通过引用交换两个值没有发生错误但编译器抛出一些消息

java - java 如何查找当前是一周中的哪一天

java - 如何在没有 ImageIO.read() 的情况下将加载的字节转换为图像

java - 将 Bigdecimal 和 int 相乘产生错误

java - 单元测试 - JAVA/XML 无法找出错误

c - 动态分配数组结构的数组

python - 运行时警告 : invalid value encountered in long_scalars

ios - 如何在 xcode 8 中的对象中引用数组中的对象?

c++ - 在 C++ 中通过引用传递二维动态字符串数组