目标C数组=新的双[];Java中的行为

目标C数组=新的双[];Java中的行为,java,objective-c,arrays,Java,Objective C,Arrays,我正在将一个算法的一部分从Objective C源代码重写到我的java程序中,不知道我做得是否正确。问题是,有一个数组正在被传递到其他函数中,它的大小和值可能会动态变化 主要目标C: double[] output = new double[1]; foo(output); 和功能: public void Run(out double[] output){ /* Dimensioning the array, i dont understand this part, why i

我正在将一个算法的一部分从Objective C源代码重写到我的java程序中,不知道我做得是否正确。问题是,有一个数组正在被传递到其他函数中,它的大小和值可能会动态变化

主要目标C:

 double[] output = new double[1]; 
 foo(output);
和功能:

public void Run(out double[] output){

  /* Dimensioning the array, i dont understand this part, why is it 
  being allocated again? 
  Is it to increase the size in case the number is bigger than outputs 
  current dimension and does it keep values in the old part of the array? */
  output = new double[number];


  // Copy new values to the output array
  for(int i = 0; i < number; i++){
  output[i] = i+number;
  }
  //Now i should be able to access these new values in main
}

我用ArrayList输出替换了java代码中的数组,因此不得不对其他函数进行重大更改。我知道Java只通过值传递,但是否有一些技巧或其他方法来更改输出数组,使其行为类似于Objective C?我以前从未用过Objective C编程。上面的分配部分在Objective C中是如何工作的?

是的java默认情况下主要在primitive中按值传递,但当它是一个对象时,它是按引用传递的

下面是使用Integer的ArrayList通过对象进行引用传递的示例


<>你的ObjultC数组使用新的运算符,这意味着它实际上是Objut-C++程序中的C++代码。此外,还有一个函数调用,而不是向对象发送消息,所以这是另一个线索,实际上是一个C++代码。我看不到任何指针,所以它看起来像是在堆栈上分配的。它也不可调整大小,它将始终只包含1个元素,这是愚蠢的。总而言之:我认为您对原始代码有点困惑。

在两种语言中,所有内容都是按值传递的。是的,这正是我使用的,但它的工作方式是否与目标C代码相同?我的意思是他们正在将新数组分配到输出数组中,我不确定我是否使用output.clear;执行相同的效果。@CrimsonChris yes默认情况下,java是按值传递的。但对象的值是经过的reference@Rod_Algonquin你错了。Java总是按值传递。objective-c也是如此。在这个网站上有许多问题是一致的。读这个。。。Java总是按值传递。你误解了这里的价值。这不是目标。是对象引用。嗯,这让我很困惑。不知道为什么他们只希望它是1个元素的数组。
public static void run(ArrayList<Integer> a)
{
    int n = 10;

    for(int i = 0; i < n; i++)
        a.add(i+n); 
}

public static void main(String[] args) 
{
    ArrayList<Integer> b = new ArrayList<Integer>();

    run(b); 

    for(Integer in : b)
        System.out.println(in);
}