System.arraycopy的要怎么实现啊?

kingstarer 2008-04-08 11:35:17
我也想写一个通用的复制数组的函数

但是不明白的是arraycopy怎么能够支持那么多种基本类型的数组

难道一个一个重载?

(
copy(int [] newarray, int [] oldarray)
copy(boolean [] newarray, boolean [] oldarray)
这样看起来好像很傻,我想应该有其它方法吧
)



我照着写了,能支持类数组,但不支持基本类型数组
------------------------------
另外,我想arraycopy复制类数组时好像复制的是地址而不是类的具体数据,如果我想实现复制数据要怎么办好?

各位帮忙啊^_^
...全文
578 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingstarer 2008-04-11
  • 打赏
  • 举报
回复
强制转换确实可以,谢谢了
kingstarer 2008-04-11
  • 打赏
  • 举报
回复
谢谢LS的 但我想自己写一个复制数组的类
tarkhnas 2008-04-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kokobox 的回复:]
java.lang.System类里的声明是这样的:

public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);
[/Quote]

不是直接System.arraycopy(old,int1,new,int2,int3)就可以了么...不一定要转换为Object的吧,只要old数组与new数组是同类型就可以了
old:旧数组
new:新数组
int1:旧数组开始要copy的下标
int2:新数组接受旧数组的开始的下标
int3:要copy的长度;

简单的例子:通过测试
public class ArrayCopyTest{
public static void main(String[]args){
int[]a = new int[10];
int[]b = new int[10];
for(int i=0; i<a.length; i++){
a[i] = i;
}
System.arraycopy(a,0,b,0,a.length);
for(int i=0; i<a.length; i++){
System.out.print("b["+i+"]="+ i+" ");
}
}
}
数组长度不同,copy开始下标不同时注意越界问题
kokobox 2008-04-10
  • 打赏
  • 举报
回复
直接强制类型转换一下看看可以不

例如:
Object[] o =(Object[])src;
kingstarer 2008-04-10
  • 打赏
  • 举报
回复
谢谢回答,我也看过arraycopy的接口,但是不知道怎么把一个Object转换成Object数组
dracularking 2008-04-09
  • 打赏
  • 举报
回复
接受的是Object型 不一劳永逸么
Dan1980 2008-04-09
  • 打赏
  • 举报
回复
arraycopy对每种基本类型都有其重载版本,这没什么值得惊讶的。看看System的源码就知道了。
bootupnow 2008-04-09
  • 打赏
  • 举报
回复
前几天看到jdk 1.6有Arrays.copyOf(...) ,比System.arraycopy(...)好玩,嘎嘎。
kokobox 2008-04-09
  • 打赏
  • 举报
回复
java.lang.System类里的声明是这样的:

public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);
kokobox 2008-04-09
  • 打赏
  • 举报
回复
可以看一下arraycopy是如何声明的
是Object的:

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。

kingstarer 2008-04-09
  • 打赏
  • 举报
回复
LS的能讲详细点吗?

我现在是这样写的
static boolean copy(Object[] newarray, Object [] oldarray)
{
...
}

但不能支持基本类型数组
snakexiay 2008-04-08
  • 打赏
  • 举报
回复
基本类型的数组你就用for循环一个个的赋值吧

62,614

社区成员

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

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