关于java数组之间的直接赋值

wudeaaa 2009-12-08 10:15:51
Java中由于是传递的是引用,因此两个数组之间可以直接赋值,比如

public void setValue(String []src){
String []target = src;
}
这样也是允许的,因为target 获得的是Src的引用,它们指向同一块内存,但在C、C++中是不允许的,请问对于Java数组间赋值,直接赋引用好还是需要循环来一个个赋值?比如安全性,时间复杂度等等或者日常开发习惯方面来谈谈
...全文
13753 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cllover 2010-04-27
  • 打赏
  • 举报
回复
String str2=“ss”
String str1=str2
能吗
crazylaa 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kf156 的回复:]
看需求了
如果src数组的值变化,target 的值也要变化,则直接赋值
如果src数组的值变化,target 的值不允许跟着变化,则重新new一个target数组,然后用arrayCopy拷贝里头的值
[/Quote]

严重同意
kf156 2009-12-08
  • 打赏
  • 举报
回复
看需求了
如果src数组的值变化,target 的值也要变化,则直接赋值
如果src数组的值变化,target 的值不允许跟着变化,则重新new一个target数组,然后用arrayCopy拷贝里头的值
evilphoenix 2009-12-08
  • 打赏
  • 举报
回复
学习了,呵呵
bobo415 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zealvampire 的回复:]
1. 你可以直接赋值一个个的,会安全的,因为java数组是有界的
2. 你可以使用System.arrayCopy这个效率会高些。
[/Quote]
arrayCopy 里面也是有算法的 也是人写的
效率不一定是最好的
justinavril 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wudeaaa 的回复:]
引用 5 楼 justinavril 的回复:
支持System.arrayCopy。另外,在Java里数组在使用前一定要预先定义大小。
如果数组赋值是通过参数传递的,有时候不知道传入的数组大小是多少,如何预定义大小?比如
Java codeprivate String []target;publicvoid setArray(String[] src){//target = src;for(int i=0; i< src.length; i++){
target[i]= src[i];
}
}
[/Quote]
很简单嘛 你可以把原数组作为参数传进去 那么原数组的大小你是知道 这样不就好办了?
wudeaaa 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 justinavril 的回复:]
支持System.arrayCopy。另外,在Java里数组在使用前一定要预先定义大小。
[/Quote]如果数组赋值是通过参数传递的,有时候不知道传入的数组大小是多少,如何预定义大小?比如

private String []target;
public void setArray(String[] src){
//target = src;
for(int i = 0; i < src.length; i++){
target[i] = src[i];
}
}
zfq642773391 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wudeaaa 的回复:]
引用 1 楼 zealvampire 的回复:
1. 你可以直接赋值一个个的,会安全的,因为java数组是有界的
2. 你可以使用System.arrayCopy这个效率会高些。
直接赋引用 比如: target = src;这样也可以,不知道推荐这样使用吗?
[/Quote]
这样不安全,两个数组指向同一个引用,修改了一个数组的值,会造成另一个数组的值也被修改。
复制的是指向数组的引用(并不是复制数组内的数据):
好比你把你家的钥匙(相当于指向数组的引用src)复制了一把给target
target用复制的钥匙打开了你家瞎折腾(操作,如排序等)
然后你用你自己的钥匙打开你家自然会看到别人折腾过了
justinavril 2009-12-08
  • 打赏
  • 举报
回复
支持System.arrayCopy。另外,在Java里数组在使用前一定要预先定义大小。
keeya0416 2009-12-08
  • 打赏
  • 举报
回复
如果是一个个的赋值的话,就不是同一个对象了.题中就是 :
String[] target = new String[src.length()];
所以说 要直接给它引用还是一个个赋值得看情况而定了.
wudeaaa 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zealvampire 的回复:]
1. 你可以直接赋值一个个的,会安全的,因为java数组是有界的
2. 你可以使用System.arrayCopy这个效率会高些。
[/Quote]直接赋引用 比如: target = src;这样也可以,不知道推荐这样使用吗?
licip 2009-12-08
  • 打赏
  • 举报
回复
是的,同意楼上的。
zealVampire 2009-12-08
  • 打赏
  • 举报
回复
1. 你可以直接赋值一个个的,会安全的,因为java数组是有界的
2. 你可以使用System.arrayCopy这个效率会高些。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧