public class TestFiled {
public static void main(String[] args) {
String s [] = new String[] {"1","2","4","4"};
Object b = (Object)s; //这里不是向上转型的话,那是什么??
Object o = new Object();
System.out.println(b); //打印结果::[Ljava.lang.String;@70a0afab 为什么打印的不是Object??
System.out.println(o); //打印结果::java.lang.Object@456d3d51
}
}作者: 马磊 时间: 2012-10-21 00:47 本帖最后由 马磊 于 2012-10-21 01:21 编辑
Object b = (Object)s; //这里不是向上转型的话,那是什么??
这里是向上转型,但是没有必要在这里做类型转换,(Object)s 之后s还是字符串数组类型,它本身没有改变。
向上转型是子类对象赋给父类引用, b在编译的时候被当成是Object类,你可以测试一下使用b.length()方法,编译器会告诉你Object类的b是没有这个方法的。
但是在运行的时候,JVM又会把b看作是字符串数组类型。
只有把父类型赋给子类型的时候才需要强制类型转换,但是容易出现转换异常,所有就有了instanceof 运算符。作者: 给生活加点料 时间: 2012-10-21 01:06
Object b = (Object)s; 这里转型只是做了一个强制转换,把数组转成Object类型。 但你接受是数组,所以你转后也应为数组。作者: 张其辉 时间: 2012-10-21 01:09
好像不可以这样转型吧: b = (Object)s;这个“s”是存储了一个引用地址,并不代表具体内容,b是代表一个Object对象,怎么转?求解释!!!!
况且String类型的数组转Object也不用加“ (Object)”,可以自动转换啊Object b =s;作者: 新立 时间: 2012-10-21 01:13
我个人的理解,说的不对请改正
s是一个数组,而数组本事也是对象,所以Object b = (Object)s;这句不用强制转换,Object b = s; 就可以了,应该是向上转型
在说打印b为什么不是Object,原因是Object b = s;,这句话是把s的值赋给 b,而s中存储的是String[]的引用地址,也就是说,b中存储的也是String[]的引用地址。这个语句执行完成之后就是的b和s都指向了一块内存地址。所以打印出来的结果不是Object,而是和s一样的数组的地址