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

数组在Java中会通过引用返回吗?,java,arrays,pass-by-reference,Java,Arrays,Pass By Reference,I在JAI库中的类的transform方法中使用以下代码: public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) { if ( srcPts == null ) { throw new IllegalArgumentException(JaiI18N.getString(

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

如果
dstps
null
,则会创建新数组。但是这个数组不会返回外部,不是吗?

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

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

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

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

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

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


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

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

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


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

是的,你是对的,java传递值。是的,你是对的,java传递值。你给出了正确的答案,但把最重要的部分放在最后。是的。但这是原始参考资料的副本。所以你不能做
dstps=newdouble[numPts*2+dstOff]并期望它在外部产生任何影响。所以你给出了一个基本正确但有误导性的答案。对象无法传递,句号。你给出了一个正确的答案,但把最重要的部分放在了最后。是的。但这是原始参考资料的副本。所以你不能做
dstps=newdouble[numPts*2+dstOff]并期望它在外部产生任何影响。所以你给出了一个基本正确但有误导性的答案。对象不能传递,句号。Java总是按值传递。确切地“当你把一个对象作为一个参数传递的时候”,问题是,你不能在Java中“把一个对象作为一个参数传递”。对象在Java中不是值。Java中唯一的类型是基元类型和引用类型。因此,每个参数必须是基元类型或引用类型。没有“对象类型”。@newacct“底部的一小行是,当您将对象作为参数传递时,它的引用就是实际传递的值。“我不知道您是否在澄清或更正我,但您的引用似乎与上下文无关。@Gamb:您说的是“传递对象”它本身是错误的,因为您无法传递非值的内容。@newacct再次说明,您缺少上下文。这一行是澄清,而不是肯定。Java总是按值传递。确切地“当你把一个对象作为一个参数传递的时候”,问题是,你不能在Java中“把一个对象作为一个参数传递”。对象在Java中不是值。Java中唯一的类型是基元类型和引用类型。因此,每个参数必须是基元类型或引用类型。没有“对象类型”。@newacct“底部的一小行是,当您将对象作为参数传递时,它的引用就是实际传递的值。“我不知道您是否在澄清或更正我,但您的引用似乎与上下文无关。@Gamb:您说的是“传递对象”它本身是错误的,因为您无法传递非值的内容。@newacct再次说明,您缺少上下文。这句话是澄清,不是肯定。