4

来自 C 背景,我有一个非常基本的问题:是否按较大数据类型(如字符串数组)的值传递调用类似于 java 中的复制构造函数的东西。

那么这段代码是否会通过在list2中复制列表而导致在内存中创建重复列表。从而使内存和 CPU 利用率加倍。

String[] getList() {
    String[] list = new String...
    ...
    return list;
}

String [] list2 = getList();

我的假设正确吗?如果是,是否有替代方法,例如在 C 中传递指针。

PS:如果我们让垃圾收集器完成清理额外内存的工作,这不会是另一组 CPU 使用循环清理内存的循环,而这些循环一开始就不应该创建。

4

2 回答 2

5

不,不会复制数组的内容。指向堆上数组的引用将被传递。

Java没有指针,它有引用。在 Java 中,指向堆上对象的引用作为参数传递并由方法返回。数组是 Java 中的对象,因此也以这种方式处理它们。

于 2013-05-25T04:03:29.047 回答
5

不,它不会使内存和 CPU 使用率加倍。在 Java 中,所有非原始类型都存储为引用,并且这些引用按值传递。

因此,在您的示例中,该getList方法将在堆上构造一个数组并返回对该数组的引用。不涉及数组复制;只是一个参考副本。

于 2013-05-25T04:05:51.973 回答