Java如何处理ArrayList的refrerences和赋值?

Jon*_*han 0 java arraylist

我主要用C编写,但是在这个项目中使用Java.我想知道Java在这里做了什么.

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

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
}
Run Code Online (Sandbox Code Playgroud)

在类似的问题中,选项1和选项2在上面的代码中做了同样的事情吗?

谢谢-

乔纳森

leo*_*loy 8

如果从C/C++来到Java,请记住这个几乎所有这些疑问的黄金法则:在Java中,变量(除了基元)总是一个对象的引用(一种指针),而不是一个对象本身.

例如

 prevRow = currRow;
Run Code Online (Sandbox Code Playgroud)

正在分配一个引用,以便prevRow和currRow现在引用同一个对象.对象不会在赋值中传递,也不会在参数传递中复制(复制/赋值的是引用).等等.