我主要用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现在引用同一对象。既不分配对象,也不分配参数,也不传递参数(复制/分配的是引用)。等等。