数组在Java中会通过引用返回吗?
I在数组在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(
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再次说明,您缺少上下文。这句话是澄清,不是肯定。