q*******i 发帖数: 353 | 1 请教大家一个问题:Java中,我想让一个数组整个的参数传递而不要地址传递应该怎么
弄?
或者回答这个问题:假设数组a[4][4]={...},数组b[4][4]=a[4][4]的话,那么数组b
的值的地址和数组a中的地址是一样的。我就想要知道,如何建立一个数组b,数组a和
数组b的值一样但是地址不一样。
谢谢大家啦,想了很久不知道怎么解决。 |
q*******i 发帖数: 353 | 2 我遇到的问题是把数组作为参数传递给函数,在函数中数组值被修改同时原来的值也被
修改,有什么办法能让函数中值被修改但是原值不被修改。谢谢
b
【在 q*******i 的大作中提到】 : 请教大家一个问题:Java中,我想让一个数组整个的参数传递而不要地址传递应该怎么 : 弄? : 或者回答这个问题:假设数组a[4][4]={...},数组b[4][4]=a[4][4]的话,那么数组b : 的值的地址和数组a中的地址是一样的。我就想要知道,如何建立一个数组b,数组a和 : 数组b的值一样但是地址不一样。 : 谢谢大家啦,想了很久不知道怎么解决。
|
g*****g 发帖数: 34805 | 3 int[][] b = new int[4][4];
for(int i = 0; i < 4; i++)
for(int j = 0; j < 4; j++) b[i][j] = a[i][j];
b
【在 q*******i 的大作中提到】 : 请教大家一个问题:Java中,我想让一个数组整个的参数传递而不要地址传递应该怎么 : 弄? : 或者回答这个问题:假设数组a[4][4]={...},数组b[4][4]=a[4][4]的话,那么数组b : 的值的地址和数组a中的地址是一样的。我就想要知道,如何建立一个数组b,数组a和 : 数组b的值一样但是地址不一样。 : 谢谢大家啦,想了很久不知道怎么解决。
|
q*******i 发帖数: 353 | 4 是不是数组整个的传递只能是地址传递,没有办法改成值传递的?
【在 g*****g 的大作中提到】 : int[][] b = new int[4][4]; : for(int i = 0; i < 4; i++) : for(int j = 0; j < 4; j++) b[i][j] = a[i][j]; : : b
|
g*****g 发帖数: 34805 | 5 不明白你要啥,多半是对java的基本概念不熟悉。
如果要效率用System.arraycopy
【在 q*******i 的大作中提到】 : 是不是数组整个的传递只能是地址传递,没有办法改成值传递的?
|
q*******i 发帖数: 353 | 6 我遇到的问题是把数组作为参数传递给函数,在函数中数组值被修改同时原来的值也被
修改,有什么办法能让函数中值被修改但是原值不被修改。谢谢
【在 g*****g 的大作中提到】 : 不明白你要啥,多半是对java的基本概念不熟悉。 : 如果要效率用System.arraycopy
|
q*******i 发帖数: 353 | 7 还真是这个办法对,但是好像太麻烦,如果数组维数高之后,有没有办法更方便拷贝.
同时更改拷贝之后的数组不会影响原来数组的值?我试了一下system.arraycopy,改变
函数中数组的值原来数组的值也会改变
【在 g*****g 的大作中提到】 : int[][] b = new int[4][4]; : for(int i = 0; i < 4; i++) : for(int j = 0; j < 4; j++) b[i][j] = a[i][j]; : : b
|
g*****g 发帖数: 34805 | 8 你调了几次arraycopy?
【在 q*******i 的大作中提到】 : 还真是这个办法对,但是好像太麻烦,如果数组维数高之后,有没有办法更方便拷贝. : 同时更改拷贝之后的数组不会影响原来数组的值?我试了一下system.arraycopy,改变 : 函数中数组的值原来数组的值也会改变
|
T*****9 发帖数: 2484 | 9 你就copy了引用?
【在 q*******i 的大作中提到】 : 还真是这个办法对,但是好像太麻烦,如果数组维数高之后,有没有办法更方便拷贝. : 同时更改拷贝之后的数组不会影响原来数组的值?我试了一下system.arraycopy,改变 : 函数中数组的值原来数组的值也会改变
|
q*******i 发帖数: 353 | 10 就调用一次啊,在函数外先 arraycopy(b,a)。然后把数组b传递给函数,在函数中
修改数组b的值同时,a的值也被修改,我想达到只在函数中修改b的值,a的值不变,除
了你刚才说的办法,还有没有其他更高效的办法?
【在 g*****g 的大作中提到】 : 你调了几次arraycopy?
|
|
|
q*******i 发帖数: 353 | 11 那如果要copy值只能用for 循环来一个个copy吗?比如数组10000维这样是不是效率很
低啊?
【在 T*****9 的大作中提到】 : 你就copy了引用?
|
g*****g 发帖数: 34805 | 12 就copy一次所以不对,copy N次就没问题。
为啥自己想。
【在 q*******i 的大作中提到】 : 就调用一次啊,在函数外先 arraycopy(b,a)。然后把数组b传递给函数,在函数中 : 修改数组b的值同时,a的值也被修改,我想达到只在函数中修改b的值,a的值不变,除 : 了你刚才说的办法,还有没有其他更高效的办法?
|
q*******i 发帖数: 353 | 13 晕,copy N次是不是你说的for 循环copy方法?这个是对的。但是我只是想知道是不是
有更高效的办法?
【在 g*****g 的大作中提到】 : 就copy一次所以不对,copy N次就没问题。 : 为啥自己想。
|
g*****g 发帖数: 34805 | 14 那是N^2次。说的是调arraycopyN次。
【在 q*******i 的大作中提到】 : 晕,copy N次是不是你说的for 循环copy方法?这个是对的。但是我只是想知道是不是 : 有更高效的办法?
|
q*******i 发帖数: 353 | 15 看到另外一个函数clone,这个和copy的差别是不是就是一个只是clone值,然后copy是
把新object的地址指向老的object(这样修改新的老的也会被修改?)
【在 g*****g 的大作中提到】 : 那是N^2次。说的是调arraycopyN次。
|
k*******d 发帖数: 701 | 16 System.arraycopy()
example
int[] original = new int[] {71, -4, 7220, 0, 238};
int[] copy = new int[original.length];
System.arraycopy(original, 0, copy, 0, original.length);
It is a native method, very efficient!! |
d***k 发帖数: 3225 | 17 CLONE是不是可以?
好像还分为深度clone和浅clone |
C********g 发帖数: 1548 | 18 用System.arrayCopy复制一个,然后传递复制的那个。 |