您的位置:首页 > 编程语言 > Java开发

java数组相关方法的学习

2015-05-14 12:41 330 查看
java的数组有几种创建方法

1. 第一种是int[]is=new int[3];此时数组已经创建完毕了,数组的长度为3,下标从0开始,2结束。默认所有元素都为0,如果类型是object的话默认元素都为null。这个和对象的创建是一样的,初始化后的对象如果不被赋值他就默认为null,也就是没有指向堆中的任何一个元素,然而null到底是什么呢?这个问题我们以后再说。

2.第二种,int[]is=new int[]{1,2,3,4};即不定义数组的初始长度,直接把元素放到数组里。长度为4,下标从0开始,3结束。我试了下如果在最后一个元素后加上,但不追加新元素,像这样{1,2,3,4,},是不会报编译错误的,不知道为什么。而且这样写的话和数组不会受到任何影响,和不加,一样。

3.第三种,int[]is={1,2,3,4,5};和第二种相比少写了new int[]

以上三种就是java中数组的初始化,java数组变量本身只是一个应用,存在于栈中,指向堆中的数组对象本身。也就是说三个例子右边的那些数据,1,2,3是存在堆中的。

我记得以前老师说过这三种初始化时内存中的变化也会有区别,具体不记得了,回家翻翻笔记去


数组内元素的类型必须一样,元素的取值方法为int num=is[index],以数组名[下标]的形式。如果下标的值大于等于数组的length或者小于0,程序就会报ArrayIndexOutOfBoundsException()数组下标越界异常。

还有就是数组的内容可以随时变化,但是长度不可变,要变化长度只有新建数组再把老数组的内容拷贝过去。

接下来说说jdk提供的数组工具:

一个是System.arraycopy(src, srcPos, dest, destPos, length);arraycopy方法,顾名思义arraycopy就是数组拷贝。它是由native修饰的,就是说它的方法体是用c语言实现的。再来说说这个方法的参数,其实从参数名已经能看出参数的意思,src:源数组引用名,srcPos:想要从源数组的哪里开始拷贝,下标值,dest:目标数组引用名, destPos:拷贝的数组元素从目标数组的哪个下标开始黏贴,length就是拷贝过来的数组长度。

要注意拷贝的时候,目标数组的长度是不变的,如果拷过去的元素长度大于目标数组长度则会报数组下标越界异常。而且拷贝过去的元素会覆盖目标数组原有的元素。

再说一个Arrays.copyOf(original,length),这个也是数组拷贝,但是是有返回值的,也就是说可以用一个新的变量去接收拷贝以后的数组。original就是指原数组,length是指新数组的长度,也就是说可以在这个方法内定义新数组的长度!不用考虑什么下标越界异常。但length也不能为负数,因为下标从来没有负的。

由于ArrayList是由数组实现的,它的API里也用到了以上两个方法,所以对数组工具的熟悉有利于我们学习ArrayList的源代码!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐