问几个Object转换到String的问题
class MyList { public static void main(String[] args) { Object[] o = new Object[]{1, 2, 3}; String[] s = (String[])o; System.out.print(s); }}
class MyList { public static void main(String[] args) { Object o = new Object(1); String s = (String)o; System.out.print(s); }}
import java.util.*;class MyList { public static void main(String[] args) { LinkedList<String> list = new LinkedList<String>(); list.add("one "); list.add("two "); list.add("three "); String[] sa = new String[3]; sa = (String[]) list.toArray(); for (String s : sa) System.out.print(s); }}
class MyList { public static void main(String[] args) { Object[] o = new Object[]{1, 2, 3}; String[] s = (String[])o; System.out.print(s); }}
[解决办法]
Object[] o = new Object[] { "1", "2", "3" }; 这里你其实还是创建了一个Object[],并没有创建String[],虽然你数组里面存储的都是String,但这并没有把你的Object[]从本质上变成一个String[],所以这时试图将Object[]转成String[]是失败的,因为你并没有创建String[],换句话说,内存中其实不存在一个String[]。
而Object[] o = new String[] { "1", "2", "3" }; 这里你是实际创建了一个String[],然后向上转型为Object[],内存中确实是一个String[],所以当你再次向下转型为String[]时可以成功转换。
楼主其实是混淆了“数组的向上转型”和“数组元素的向上转型”两个概念。上面的第一种情况中,只存在数组元素的向上转型,不存在数组的向上转型,所以也就没有相应的向下转型。
如果还不能理解的话,可以把数组想象为贴有标签的抽屉。一个抽屉上贴着“书籍”的标签,虽然你往里边放的都是小说书,但你并没有把抽屉上的标签相应地变成“小说书”,所以它本质上还是“放书籍的抽屉”,没有变成“放小说书的抽屉”,当然就不能当作“放小说书的抽屉”来用;而如果一个抽屉上贴着“小说书”的标签,那么它可以被当作一个“放书籍的抽屉”,但本质上它是一个“放小说书的抽屉”,既可以当作“放书籍的抽屉”来用,也可以当作“放小说书的抽屉”来用。