Java 列表按引用或值传递

标签 java list memory-management

我来自 C++,带有指针和引用 ( const string& str/string* str )。

我了解到 Java 中是通过 new 语句创建对象的。

Bucket b1 = new Bucket();

现在我有一个名为 b1 的引用,它“指向”一个 Bucket 类型的对象,对吗?

在我的 Android 应用程序中,我处理了很多列表。这些列表可能包含 1000 个对象。

for( int i = 0; i < 1000; i++ )
   myList.add( new Bucket() );

我现在的列表包含 1000 个 Bucket 对象。或者它是否包含 1000 个对 Bucket 对象的引用?

但是如果我像这样将另一个项目添加到列表中:

b1 = new Bucket();
myList.add( b1 );

b1myList 是否引用/包含相同的对象(当然,myList 在其最后一个索引处)?

如果我有另一个列表:

List<Bucket> anotherList = myList;

两个列表是否引用包含相同的对象?或者 anotherList 引用 myList 吗?

最佳答案

Java 总是按值传递。然而,任何Object实例的值都是一个引用地址。

在您的问题中,anotherList 不是另一个List。它是对 myList 的引用,

List<Bucket> anotherList = new ArrayList<>(myList);

这是 List 的另一个实例。

关于Java 列表按引用或值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24511454/

相关文章:

java - 在 OSGI Bundle 中查找文件和文件夹

java - 如何引用顺序计算列表中的重复值

c++ - 在没有新运算符的情况下 segmentation 四叉树

python - 莫名其妙的非对象python内存泄漏

java - 更新android支持库依赖项后的问题

java - 从java中的方法更改数组的大小

java - Jmeter 监听器显示 "javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?"

android - 以编程方式访问 CheckedTextView 列表中的特定行 - Android

Java:查找用户设置的多个整数列表中的最大数字

c - 带填充的结构的大小