Java 如何处理 ArrayList 引用和赋值? [英] How does Java handle ArrayList refrerences and assignments?

查看:40
本文介绍了Java 如何处理 ArrayList 引用和赋值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我主要用 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 引用和赋值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆