首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java浅拷贝数组

Java浅拷贝数组
EN

Stack Overflow用户
提问于 2016-06-04 06:08:17
回答 2查看 295关注 0票数 0

如果这是一个浅拷贝

代码语言:javascript
复制
double[] a = new double[100];
a = b; // let b be some other double array[100]

我知道更好的方法是使用for循环或使用

代码语言:javascript
复制
System.arrayCopy(b,0,a,0,100);

然而,这又会发生什么呢?

代码语言:javascript
复制
public double[] function1(){
    returns somedouble[100];
}

double[] a = new double[100];
a = function1(); // i believe this will also be a shallow copy

System.arrayCopy(function1(),0,a,0,100); // will this call function1 100 times?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-04 06:38:11

代码语言:javascript
复制
double[] a = new double[100];
a = b; // let b be some other double array[100]

创建一个名为a的数组,其大小为100。现在,当a = b将b数组的引用复制到变量a时。

代码语言:javascript
复制
     +--------------------------------------------+  <- Suppose whole
a->  | 2.5 |  |  |  |  |  |  |  |  |  |  |  |  |  |  array is filled 
     +--------------------------------------------+  with value 2.5

     +--------------------------------------------+  <- Suppose whole
b->  | 7.9 |  |  |  |  |  |  |  |  |  |  |  |  |  |  array is filled 
     +--------------------------------------------+  with value 7.9

在a=b之后

代码语言:javascript
复制
     +--------------------------------------------+  <- Suppose whole
     | 2.5 |  |  |  |  |  |  |  |  |  |  |  |  |  |  array is filled 
     +--------------------------------------------+  with value 2.5

a->  +--------------------------------------------+  <- Suppose whole
b->  | 7.9 |  |  |  |  |  |  |  |  |  |  |  |  |  |  array is filled 
     +--------------------------------------------+  with value 7.9

所以现在a和b指向同一个数组。

代码语言:javascript
复制
public double[] function1(){
    return somedouble[100];
}

double[] a = new double[100];
a = function1();

现在这里也发生了同样的事情。创建一个名为a的数组,然后调用function1(),然后再次将返回的数组引用分配给。

代码语言:javascript
复制
System.arraycopy(function1(), 0, a, 0, 100);

这里的呼叫顺序是

将调用1 -> function1(),并将返回的数组引用保存在一个临时变量中。

2 ->调用System.arraycopy(temporary variable, 0, a, 0, 100)

因此,function1()只会被调用一次。

另外,请确保您使用的是System.arraycopy(args)而不是System.arrayCopy(args)

票数 2
EN

Stack Overflow用户

发布于 2016-06-04 06:24:59

代码语言:javascript
复制
    double[] a = new double[100];
    a = b; // let b be some other double array[100]

首先,它是分配,而不是复制。

代码语言:javascript
复制
    double[] a = new double[100];
    a = function1(); // i believe this will also be a shallow copy

它在分配。将返回的值somedouble100分配给

System.arrayCopy( function1 (),0,a,0, 100 );//会调用function1 100次吗?

不,不会给function1打100次电话。以上代码主要等于

代码语言:javascript
复制
    double[] tmpref = function1();
    System.arrayCopy(tmparr,0,a,0,100);

因为它首先计算参数,然后调用arrayCopy

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37626972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档