1 Object obj = "String"; 2 String str = (String) obj; // OK 3 4 Object[] arr = new String[] { "ab", "cd" }; 5 String[] arr2 = (String[]) arr; // OK 6 7 Object[] objs = {"One", "two"}; 8 String[] strs = (String[]) objs; // java.lang.ClassCastException异常,Why?
对于第8行代码报错的情况不理解,为什么报错。
我现有的认识是,objs的每个元素引用的不是String对象吗,按1、2行的代码来讲,再强制转换回来应该是可以的。
请指教,感恩!!!
Java的Object数组不能转换成为String[]数组,要转换的数组它本身是Object类型的数组,但要把它转换为String类的数组,这当然是错误的。上边两个调用的构造函数都是String的构造函数,所以本身就是String类型的。当然没有错了。看看我的代码和运行结果。
//1.Object[]中可以存储任何类型的对象(任意类型不是Object就是其子类), String[]中可以存储String及其子类对象
//2.对1进行概括,对于T[],其中只能存储T及其子类的对象
//3.关于String[]可以赋值给Object[]的可能解释: String[]中所有对象都属于Object及其子类;
// 关于Object[]不能转换为String[]的可能解释: Object[]中的某些对象属于Object或Object的子类, 且不属于String及其子类
//String好像没有子类...emmc