数组长度可以任意增加?

码农兼养猪 2017-07-06 11:31:27

import java.util.Arrays;


public class A {
public static A[] a={};//这里定义数组,难道是 定义成 Arrays ?抑或是声明引用而已

public void test()
{
System.out.println(a.length);

a = (A[]) Arrays.copyOf(a,a.length + 1);
System.out.println(a.length);

a = (A[]) Arrays.copyOf(a,a.length + 1);//临时Arrays,函数结束后(超过作用域),内存还能继续使用?
System.out.println(a.length);
}

public static void main(String[] args) {
A one = new A();
one .test();
}
}


运行结果:
0
1
2
...全文
1023 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
我爱娃哈哈 2017-07-13
  • 打赏
  • 举报
回复
Arrays.copy()方法里面的实现会重新创建一个新数组的,然后把老数组的数据放进新数组中返回给你,所以给你造成了觉得数组也可以扩容的效果,进去看看源码就知道了
MikeDDT009 2017-07-12
  • 打赏
  • 举报
回复
问题1: 声明了一个数组并且进行了初始化,而不是只声明,只是这里数组长度为0而已 问题2: 数组长度一旦确定就是死的,不可更改的 问题3: 为什么实现了动态增加,最根本原理是: 增加:复制原来的数组内容,然后根据原数组长度+1 获得一个新数组,然后把增加的数插入到新数组,然后把新数组交给原来的引用,这样就达到了看似动态增加。 删除等都是一样的效果
JavaTree2017 2017-07-12
  • 打赏
  • 举报
回复
使用copyOf()方法必须明确,是自行新建立一个数组对象。
Arrays的copyOf()方法传回的数组是新的数组对象,所以改变传回数组中的元素值或者数组长度,是不会影响原数组的。比如:
int[] arr1 = {1, 2, 3, 4, 5}; 
int[] arr2 = Arrays.copyOf(arr1, arr1.length);

for(int i = 0; i < arr2.length; i++)
System.out.print(arr2[i] + " ");

运行结果为:1 2 3 4 5

copyOf()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值,例如:
int[] arr1 = {1, 2, 3, 4, 5}; 
int[] arr2 = Arrays.copyOf(arr1, arr1.length+1);

for(int i = 0; i < arr2.length; i++)
System.out.print(arr2[i] + " ");

运行结果为:1 2 3 4 5 0

欢迎来提问
nikyotensai 2017-07-10
  • 打赏
  • 举报
回复
galiniur0u 2017-07-10
  • 打赏
  • 举报
回复
只是根据新的长度重新创建一个数组,再把原有数据的数据放进去而已,并非真正的动态增加数组长度。
dong_19890208 2017-07-06
  • 打赏
  • 举报
回复
遇到问题,可以试着看看相关工具类的源码就明白了
110成成 2017-07-06
  • 打赏
  • 举报
回复
copyOf 源码,首先是创建一个新的数组,然后再拷贝。 public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }

62,634

社区成员

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

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