Java中System.arraycopy()方法问题(这里的0是怎么出现的,有大佬解释以下么?)

廖子默 2019-06-14 01:49:45
源代码如下
/**
* ClassName:CopyOfTest
* Author:LFM
* Date:2019/6/14 12:35
**/
public class CopyOfTest {
public static void main(String[] args) {
int [] a = {1,2,3,4,5,6};//定义一个整型数组
a = (int[]) goodCopyOf(a,10);
System.out.println(Arrays.toString(a));

}
/**
*@author LFM
*@Description 利用这个方法进行数组的复制会抛出异常
*@date 2019/6/14
*/
public static Object[] badCopyOf(Object[] a,int newLength){
Object[] newArray = new Object[newLength];
System.arraycopy(a,0,newArray,0,Math.min(a.length,newLength));
return newArray;
}
public static Object goodCopyOf(Object a,int newLength){
Class c1 = a.getClass();
if (!c1.isArray()) return null;//首先确定是一个数组
Class componentType = c1.getComponentType();//使用Class类的getComponentType()方法确定数组类型
int length = Array.getLength(a);
Object newArray = Array.newInstance(componentType,newLength);
System.out.println(length);
System.out.println(newLength);
System.arraycopy(a,0,newArray,0,Math.min(length,newLength));
return newArray;
}

}

其中我调用那个goodCopyOf()方法,使用一个Math.min()方法,按道理应该返回数值小的那个(即原本数组的长度6),为什么最后还是出现新数组长度为10?(话说不清楚,运行结果如下:)

...全文
226 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2019-06-14
  • 打赏
  • 举报
回复
int型的数组初始化后默认值都是0,你没赋值,那自然还是0
廖子默 2019-06-14
  • 打赏
  • 举报
回复
哦,我知道为什么了,就是第28行代码生成目标数组的时候用了这个newLength的长度,又因为这个数组是一个Object对象数组,我想应该是默认赋值为0把,然后复制的长度小于目标的长度,所以值替换起始位置到min值的位置的元素,其他的还是0

62,612

社区成员

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

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