第一种情况,传非对象数组
public class Test {
public static void main(String[] args) throws Exception {
int[] arr={1,2,3};
//把int[]传给Object...objects,会把int[]当成1个Object对象处理
//传入非对象的数组时,它会把整个数组当做一个Object 实例,打印出的 结果为 1
get(arr); //输出1
}
public static void get(Object...objects){
System.out.println(objects.length);
}
}
第二种情况,传对象数组
public class Demo3
{
public static void main(String[] args) throws Exception
{
String[] strings={"a","b","c"};
//会把String[]的数据解析为多个String元素。
//如果传入的是一个对象数组,那么可变参数的长度就等于该对象数组的长度
get(strings);//输出3
}
public static void get(Object...objects)
{
System.out.println(objects.length);
}
}
打包为Object整个传入。
public class Demo3
{
public static void main(String[] args) throws Exception
{
String[] strings={"a","b","c"};
//会把String[]整个作为Object传入。不会解析为String元素。
get((Object)strings);//输出1
}
public static void get(Object...objects)
{
System.out.println(objects.length);
}
}
总结
形参为可变参数的时候会自动把你传入的对象数组解析,String[]数组解析为数组个数的String对象。
public class Student
{
private String[] hobby;
}
但是你要通过invoke(student,Object...objects)为hobby传入一个数组的话,这样就只能把strings包装为
(Object)strings,这样才能把数组整个传入进去。不能直接传入一个String[],因为会把字符串数组自动解析为字符串,这样的话就参数个数不匹配了。