一、类型后面三个点(String…),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟…,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]。
例如我们有一个方法叫做test(String…strings),那么你还可以写方法test(),但你不能写test(String[] strings),这样会出编译错误,系统提示出现重复的方法。
在使用的时候,对于test(String…strings),你可以直接用test()去调用,标示没有参数,也可以用去test(“aaa”),也可以用test(new String[]{“aaa”,”bbb”})。
另外如果既有test(String…strings)函数,又有test()函数,我们在调用test()时,会优先使用test()函数。只有当没有test()函数式,我们调用test(),程序才会走test(String…strings)。
package test_string;
public class Test {
private Test(){
test();
test("a","b");
test(new String[]{"aaa","bbb"});
test("ccc");
}
private void test(){
System.out.println("test hello");
}
private void test(String...strings){
for(String str:strings){
System.out.print(str + ", ");
}
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t = new Test();
//t.test();
}
}
运行结果:
test hello
a, b,
aaa, bbb,
ccc,
二、Java中的arraycopy函数
System.arraycopy()拷贝数组的功能。
arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
Object src:源数组(要被复制的数组)
Object dest:目标数组
int destPos:目标数组要被复制的起始索引位置
int length:复制的长度!(源数组被复制的那一段的长度,同时目标数组复制完后被覆盖的那一段的长度)
从指定源数组中复制一个数组,复制从指定的位置开始,到指定位置结束(length)。从 src 引用的源数组到
dest 引用的目标数组,数组组件的一个子序列被复制下来。
被复制的组件的编号等于 length参数。
源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的destPos 到 destPos+length-1 位置。
举例见下:
public static void main(String[] args) {
byte[] srcBytes = {2,4,5,7,9,3,6,10,15,50};
byte[] destBytes = {1,2,3,4,5,6,7,8,9};
System.arraycopy(srcBytes, 3, destBytes, 2, 4);
for(int i = 0;i< destBytes.length;i++){
System.out.print(destBytes[i]+" ");
}
}
输出结果:
1 2 7 9 3 6 7 8 9
注意:从结果来看,目标数组那一段是被覆盖了!!!这点非常重要!!!不要想当然。
补充:这个函数还可以实现数组的自己到自己复制。
public static void main(String[] args) {
int [] a= {1,2,3,4,5,6};
System.arraycopy(a, 0, a, 3, 3);
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
输出结果:
1 2 3 1 2 3
原理其实一样,只不过结果是改变了自己而已。