Java如何处理ArrayList引用和赋值?
我主要是用C语言写的,但我在这个项目中使用Java。我想知道Java在幕后做什么Java如何处理ArrayList引用和赋值?,java,arraylist,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); } ArrayList
ArrayList<Integer> prevRow, currRow;
currRow = new ArrayList<Integer>();
for(i =0; i < numRows; i++){
prevRow = currRow;
currRow.clear();
currRow.addAll(aBunchOfItems);
}
ArrayList prevRow,currRow;
currRow=newarraylist();
对于(i=0;i
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
}
private ArrayList someFunction(ArrayList l){
集合。排序(l);
返回l;
}
main(){
ArrayList=新的ArrayList(整数(3)、整数(2)、整数(1));
list=someFunction(list);//选项1
someFunction(list);//选项2
}
在一个类似的问题中,选项1和选项2在上述代码中是否做了相同的事情
谢谢-
乔纳森
如果您是从C/C++来到Java,请记住这条黄金法则,它将回答几乎所有这些疑问:在Java中,变量(原语除外)始终是指向对象的引用,而不是对象本身 比如说
prevRow = currRow;
正在指定引用,以便prevRow和currRow现在引用同一对象。对象既不在赋值中也不在参数传递中复制(复制/赋值的是引用)。等等
prevRow=currRow行是否正在复制
prevRow现在指向的是列表还是
与currRow相同的列表?如果前一行
指向与currRow、I相同的列表
应改为创建新的ArrayList
清理
它现在是对同一列表的引用。因此,清除它将核化您的列表。Insead docurrRow=new ArrayList()
在类似的问题中,执行选项1和
选项2在同一时间做同样的事情
以上代码
是的。您正在传递对列表的引用,并对其进行更改。所以两者都起作用。选项2更清楚地说明了您正在做什么,我更喜欢它的风格,但两者都有效
记住,Java总是按值传递。。但对于非原语类(通常以大写字母开头的任何类…),传递的是内存地址的值,而不是内存中内容的值。对于primative(int,float),则只需传递值。问题的基础与数组列表无关。您应该了解Java中如何处理引用