4 java
来自C背景我有一个非常基本的问题:传递一个像String数组这样的更大数据类型的值会调用java中的复制构造函数.
因此,此代码会导致通过复制list2中的列表在内存中创建重复列表.因此双内存和CPU利用率.
String[] getList() {
String[] list = new String...
...
return list;
}
String [] list2 = getList();
Run Code Online (Sandbox Code Playgroud)
我的假设是否正确?如果是,是否有像C中传递指针的替代方法.
PS:如果我们让垃圾收集器完成清理额外内存的工作,那么这不是另一组清理内存的CPU利用率,而这些内存本来就不应该创建.
不,不会复制数组的内容.将传递指向堆上的数组的引用.
Java没有指针,它有引用.在Java中,指向堆上对象的引用作为参数传递并由方法返回.数组是Java中的对象,因此它们也是这样处理的.
不,它不会使内存和CPU使用量增加一倍.在Java中,所有非基本类型都存储为引用,并且这些引用按值传递.
因此,在您的示例中,该getList方法将在堆上构造一个数组并返回对该数组的引用.没有涉及数组副本; 只是一个参考副本.
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |