在阅读java核心技术第一卷时有一个技术细节值得记录一下:
基本数据类型数组和Object类型是可以互相转换的,但是基本数据类型不能和Object[]对象型数组进行转换。
简言之: 在java中数组是对象,对象数组和原始数据类型数组在使用方法上几乎是完全一致的,唯一的差别在于对象数组容纳的是引用而原始数据类型数组容纳的是具体的数值。
比如如下代码:
[code="java"]
import java.util.Arrays;
public class test {
private static void r(Object o){
System.out.println(Arrays.toString((int[])o));
}
/**
* @param args
*/
public static void main(String[] args) {
int[] a = new int[10];
r(a);
}
}
[/code]
我们可以看到输出结果为:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但我们不能将静态方法r中的参数类型申明为Object[] ,这样是编译不通过的。
在非基本类型数组与Object之间的转换时我们可以使用Object做为参数类型,也可以使用Object[]做为参数类型,其中的区别可以参考如下代码:
[code="java"]
class Student{
String name="zhang";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class test {
private static void r1(Object o){
for(Object obj : (Object[])o){
System.out.println(((Student)obj).getName());
}
}
private static void r2(Object[] o){
for(Object obj : o){
System.out.println(((Student)obj).getName());
}
}
public static void main(String[] args) {
Student[] student = {new Student(),new Student()};
r1(student);
r2(student);
}
}
[/code]
输出结果是一样的。