用Java指向同一个数组

时间:2011-01-04 12:20:41

标签: java pointers

我只是想确保我对此很清楚,因为我不确定确切的行为。我有两个数组:

private short[] bufferA;
private short[] bufferB;

我要在它之间交换。我可以这样做:

private short[] currentBuffer;

while(something)
  {
  currentBuffer = (condition) ? bufferA : bufferB;
  modify(currentBuffer);
  }

根据某些条件修改bufferA或bufferB,或者我应该使用标志并手动编码,如下所示:

private int currentBuffer;

while(something){
  currentBuffer = (condition) ? BUFFER_A : BUFFER_B;
  if(currentBuffer == BUFFER_A) {
    modify(bufferA);
  }else{
    modify(bufferB);
  }
}

我正在使用的代码比这个简化的示例更复杂,所以如果我能够做到第一种更受欢迎的方式。

5 个答案:

答案 0 :(得分:4)

虽然您的数组持有基元,但数组本身就是对象

所以参考可行。

Java通过值原语和引用对象传递。

答案 1 :(得分:3)

是的,你可以。对数组的引用与任何其他引用一样。

答案 2 :(得分:2)

你的第一个例子应该可以正常工作。

答案 3 :(得分:1)

第一种方法适用于数组(或任何其他容器)。

但是,您无法重新分配变量,只需更改其内容:

int myVar = someCondition ? myInt1 : myInt2;
// this has no effect on either myInt1 or myInt2
myVar = 1000;

这里的原因是Java按值传递所有内容,包括引用。

因此,如果您将引用传递给其他地方的容器,则该代码可以更改容器的内容,您的代码将看到更改。

答案 4 :(得分:1)

两者都是allrite ..你可以继续第一种方式.. 编辑:作为旁注,java中的引用更像是c ++中的指针而不是c ++中的引用。当然,java引用和c ++指针之间仍然存在一些差异,例如你可以在c ++中做指针运算..