数组初始化赋值是指在数组,数组赋初值的基本形式
目录
java数组初始化初始值方法1,方法2,方法3,数组互相赋值,使用用于回收对象的clone(),使用系统的静态方法arraycopy()
java数组初始化赋初值
方法一
int[]vis 1;//声明vis1=new int[100]未初始化;//为(int i=1=1定义占用空间大小(100int);I=5;I){ vis 1[I]=I;//为(int I=1;i100I){ system . out . print(vis 1[I] );//output,未赋值的是0 } system . out . println(vis 1 . length);//输出vis1数组的长度
方法二
int[] vis2={1,2,3,4,5 };for(int I=0;i5;I){ system . out . print(vis 2[I]);} system . out . println(vis 2 . length);
方法三
int[] vis3=new int[]{1,2,3,4,5,6 };system . out . println(vis 3 . length);
00-1010本文讨论Java中数组的赋值。在讨论这个问题之前,我们首先要明白一件事。Java中的数组到底是什么?是一个类,一个对象,还是别的什么奇怪的东西。回答:Java中的数组本质上是对象。但是这个对象不是由类实例化的,而是由JVM创建的。不难解释,对于一个数组对象arr,我们可以通过arr.length直接访问数组的长度
现在我们知道Java中的数组本质上是对象,让我们看看这样的代码是否合理:
int[] a={1,2,3 };int[]b=new int[3];b=a;for(int I=0;i a .长度;I)a[I]=0;我们最初的想法是把数组A的值赋给B,然后清空数组A,但是我们会发现数组A和B都被清空了。
由于数组本质上是对象,所以让我们分析一下这两个代码在Java内存模型中发生了什么。
int[] a={1,2,3 };堆里会生成一个对应的对象,A会指向这个对象,然后int[]b=new int[3];B也会指向这个对象。例如,当我们修改一个[0]时,我们实际上修改了堆中的对象。数组B仍然指向这个堆中的对象,当然数组B的值也发生了变化。
这里显而易见,所以其实不太合理。比较两个引用指向堆中的同一个对象,其中一个修改必然导致另一个的修改。
那么数组的赋值究竟应该怎么做呢?
数组互相赋值方式
int[] a={1,2,3 };int[]b=new int[3];for(int I=0;ia .长度;I)b[I]=a[I];这样可以实现赋值操作,灵活性好,但是效率是个问题。
00-1010既然数组本质上是一个对象,那么他就有了clone()方法。我们可以使用clone()方法来复制:
int[] a={1,2,3 };int[]b=(int[])a . clone();//不要忘记强制类型转换
使用for循环
系统提供了一个静态方法arraycopy(),其原型如下:
Public static void数组copy (object src,int src pos,object dest,int destpos,int length) src 3360源数组srcPos:要从dest:复制的源数组destPos:从length放置的目标数组:复制长度我们可以用它在数组之间复制3360
int[] a={1,2,3 };int[]b=new int[3];System.arraycopy(a,0,b,0,3);这种方法高效灵活。许多基于数组实现的Java集合类在复制数组时使用这种方法。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。