Chr*_*ris 1 java performance pass-by-reference data-structures
自从我上次用Java编写代码以来已经有一段时间了,但我需要一点提示.我们有一个简单的功能 - 请注意这是C:
void update(double *source, double *target, int n) {
for(int i = 0; i < n; ++i)
target[i] = source[i] * i; // well, actually a bit more complicated, just some kind of calculation
}
Run Code Online (Sandbox Code Playgroud)
所以,现在我需要在Java中重新编码这个函数 - 有效.我的问题是:
请注意,源和目标是大型数组,最多可存储100万个元素
在Java中,它几乎是一样的:
static void update(double[] source, double[] target, int n)
{
for (int i = 0; i < n; i++)
target[i] = source[i] * i;
}
Run Code Online (Sandbox Code Playgroud)
你不复制任何内存.将数组传递给此函数时,它会按值传递对数组的引用.
通常,Java按值传递函数参数.但是对于数组和用户定义的类,您正在处理的对象始终是引用类型.因此,对类和数组的函数调用总是按值传递类/数组引用.
所以如果你有一个看起来像这样的类:
class Foo
{
int[] A; // For arguments say let's say this contains 1 million items always
}
Run Code Online (Sandbox Code Playgroud)
你有一个可以调用的功能:
static void Bar(Foo f)
{
....
}
Run Code Online (Sandbox Code Playgroud)
它只传递引用Foo,它根本不会复制数据.
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |