4.3 数组的引用传递
数组属于引用数据类型,而引用数据类型是整个Java学习的关键,为了帮助读者更好地理解引用传递,下面将利用数组与方法间的传递进行引用传递的初步分析。
4.3.1 传递及返回数组
前面的方法操作传递和返回的都是基本数据类型,除此之外方法中也可用来传递和返回数组。如果要向方法中传递一个数组,则方法的接收参数处必须是符合其类型的数组。而且数组属于引用数据类型,所以在把数组传递进方法之后,如果方法对数组本身做了任何修改,修改结果也将保存下来。
【例4.16】向方法中传递数组
程序执行结果:
在上面的程序中,在一个整型数组temp传递到了方法中,然后在fun()方法中将此整型数组的第1个元素的内容修改为6,因为数组是引用数据类型,所以,即使方法本身没有任何的返回值,修改后的结果也会被保存下来,向方法中传递数组的过程如图4-14所示。
图4-14 向方法中传递数组的过程
从图4-14中可以发现,一开始声明的temp数组,其内容本身是“1、3、5”,但是将此数组传递到了方法中,使用了数组x接收,也就是说此时temp实际上是将堆内存空间的使用权传递给了方法,为数组的具体内容起了一个别名x,然后在方法中通过x修改数组中的内容,方法执行完毕之后,数组x因为是局部变量所以就失效了,但是对于数组内容的改变却保留了下来,这就是数组引用传递的过程。关于引用数据类型的引用传递,本书在面向对象部分还会有更加完整地介绍。
既然方法可以接收一个数组,那么方法也就可以返回一个数组,只需要在返回值类型声明处明确地写出返回的数组类型即可。
【例4.17】使用方法返回一个数组
程序执行结果:
4.3.2 范例1——数组排序
【例4.18】利用方法实现数组排序操作
程序执行结果:
上面的程序将排序和输出的功能分别定义成了一个方法,以后直接调用这两个方法,就可以完成排序或输出的功能,在调用sort()或print()方法时将数组的引用传递过去,这样就可以直接对主方法中定义的score和age数组进行排序或输出,如图4-15所示。
图4-15 引用传递
当然,对于排序的操作,在Java本身也是有类库支持的,可以直接使用“java.util.Arrays. sort(数组名称)”语句对数组进行排序。
【例4.19】使用Java类库完成数组的排序操作
程序执行结果:
可见,通过一条语句就可以完成数组的排序功能,上面的调用语法暂时不理解也没有什么关系,读者只需要照原样写进去进行练习即可,而且此方法可以直接对各个基本数据类型的数组进行排序,包括浮点型、字符型等。
4.3.3 范例2——数组复制
给定两个数组,将其中一个数组的指定位置的内容复制给另外一个数组。可以使用方法来完成,在方法中接收5个参数:“源数组名称”“源数组开始点”“目标数组名称”“目标数组开始点”“复制长度”,程序如下。
【例4.20】数组复制操作
程序运行结果:
从上面程序的运行结果中可以看出,确实可以完成数组的复制操作。对于此种代码在Java中也同样是存在类库支持的,直接使用System.arraycopy()方法即可,此方法中也要接收参数,参数的接收顺序及意义与例4.20中的copy()方法相同。
【例4.21】使用Java类库中的方法完成数组复制操作
程序执行结果:
从以上的两道范例中可以发现,Java为开发者提供了各种各样的支持,随着读者的开发经验积累,了解的类库也会越来越多,开发的速度也就会越快。
提示
Java中的类库。
在Java中提供了大量的类库,这些类库可以直接从Java Doc中查找到,但是在此处读者最好在学习完第2部分的内容后再进行深入研究。