问题描述
我主要用 C 编写,但在这个项目中使用 Java.我想知道 Java 在幕后做了什么.
I mostly write in C but am using Java for this project. I want to know what Java is doing here under the hood.
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 而不是清除....
Is the prevRow = currRow line copying the list or does prevRow now point to the same list as currRow? If prevRow points to the same list as currRow, I should create a new ArrayList instead of clearing....
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在上面的代码中做同样的事情吗?
In a similar question, do Option 1 and Option 2 do the same thing in the above code?
谢谢-
乔纳森
推荐答案
如果你从 C/C++ 开始接触 Java,请记住这条黄金法则,它几乎可以回答所有这些疑问:在 Java 中,变量(原语除外)是 始终是对对象的引用(某种指针),而不是对象本身.
If you come to Java from C/C++ remember this golden rule which will answer almost all these doubts: in Java a variable (except primitives) is always a reference (sort of pointer) to an object, never an object in itself.
例如
prevRow = currRow;
正在分配一个引用,以便 prevRow 和 currRow 现在引用同一个对象.对象不会被复制,无论是在赋值中还是在参数传递中(复制/分配的是引用).等等.
is assigning a reference, so that prevRow and currRow now refer to the same object. Objects are not copied, neither in assignments, nor in argument passing (what is copied/assigned is the reference). And so on.
这篇关于Java 如何处理 ArrayList 引用和赋值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!