我主要用C语言编写程序,但在该项目中使用Java。我想知道Java在这里做什么。

ArrayList<Integer> prevRow, currRow;
currRow = new ArrayList<Integer>();
for(i =0; i < numRows; i++){
    prevRow = currRow;
    currRow.clear();
    currRow.addAll(aBunchOfItems);
}


是prevRow = currRow行复制了列表,还是prevRow现在指向与currRow相同的列表?如果prevRow指向与currRow相同的列表,我应该创建一个新的ArrayList而不是清除...。

private ArrayList<Integer> someFunction(ArrayList<Integer> l){
    Collections.sort(l);
    return l;
}

main(){
    ArrayList<Integer> list = new ArrayList<Integer>(Integer(3), Integer(2), Integer(1));

    list = someFunction(list);  //Option 1
    someFunction(list);  //Option 2
}


在类似的问题中,选项1和选项2在上述代码中是否做相同的事情?

谢谢-

乔纳森

最佳答案

如果您是从C / C ++来的Java,请记住一条黄金法则,它将回答几乎所有这些疑问:在Java中,变量(原始变量除外)始终是对象的引用(某种指针),而不是对象本身。

例如

 prevRow = currRow;


正在分配引用,因此prevRow和currRow现在引用同一对象。既不分配对象,也不分配参数,也不传递参数(复制/分配的是引用)。等等。

07-26 03:07