由String类对象转换为Object对象的实现原理

minyunlin123 2012-05-09 10:50:27
今天学习java容器这一章内容,先有如下疑问:
1、String类中对toString()方法实现的原理是什么,为什么可以直接由System.out.println(对象名)打印出来?
2、String类定义的对象所具有的属性有哪些?Object定义的对象又具有哪些属性?
3、Object o = new String("Hello!!!");
System.out.println(o);
这个“Hello”是怎么自动转化为Object对象的??也就是说为什么可以这样赋值?

希望各位同学来帮下忙,网上查不到,多谢大家了!!!
...全文
4969 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sffx123 2012-05-09
  • 打赏
  • 举报
回复
java中所有类都是object的派生类(子...类),String也不例外,所以new String("hello")这个对象可以转换成Object类型,System.out.println(对象),会默认调用对象.toString类型,如果子类没有覆写,就会调用Object的toString方法,
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
,String类有自己的toString方法,返回自己。
dracularking 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]

2、String类定义的对象所具有的属性有哪些?Object定义的对象又具有哪些属性?
3、Object o = new String("Hello!!!");
System.out.println(……
[/Quote]
2.子类对象属性集肯定大于等于父类的

3.因为String是Object子类,语法层面上是认可这种向上类型转换的,String类内部是通过它的属性,char数组来维护字符串内容的,Object没有
辛格瑞拉 2012-05-09
  • 打赏
  • 举报
回复
1、String类中对toString()方法实现的原理是什么,为什么可以直接由System.out.println(对象名)打印出来?
String类中对toString()方法的实现其实是重写了父类Object的toString()方法,而System.out.println()参数类型支持Object,及其子类String和原始类型int,long,double等
2、String类定义的对象所具有的属性有哪些?Object定义的对象又具有哪些属性?
可以看看jdk 源码,对照一下
3、Object o = new String("Hello!!!"); System.out.println(o); 这个“Hello”是怎么自动转化为Object对象的??也就是说为什么可以这样赋值?
如源码:public final class Stringextends Objectimplements Serializable, Comparable<String>, CharSequence。。。String 类也是Object类型 ,我设一个比喻吧Object 是中国,String 是北京,你可以说中国包含北京,北京属于中国,反过来能说北京包含中国,中国属于北京吗?父类抽象,子类具体。。。。
汗,本人语言组织能力有限,真不知道该肿么解释。。。。就这样了,希望对你有点帮助
dracularking 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
1、String类中对toString()方法实现的原理是什么,为什么可以直接由System.out.println(对象名)打印出来?
[/Quote]
println的重载函数中包括以下这个:
println(Object)
它是会去调用Object的toString方法的,在valueof中使用了。

public void println(Object x) {
String s = String.valueOf(x);
synchronized(this) {
print(s);
newLine();
}
}
kijioy 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

可不可以这么理解,就是在Object类定义中的属性中存在String类定义的对象?所以可以直接赋值字符串!
[/Quote]

举个例子吧
一个动物跟一个老鼠
动物只有 “名称”这个属性
老鼠除了有“名称”还有“颜色”属性

老鼠继承于动物

动物 a = new 老鼠()
就是说 老鼠是动物的一种,我们把老鼠可以叫做老鼠也可以叫做动物
当使用a时只能使用动物的属性
ai逍遥 2012-05-09
  • 打赏
  • 举报
回复
单纯给你回答了这个问题,碰到别的继承之类的还是不会的。看一下String的源码吧,还有JAVA的继承。这些都会游刃而解的!
ai逍遥 2012-05-09
  • 打赏
  • 举报
回复
看一下String的源码吧,还有JAVA的继承。这些都会游刃而解的!@
minyunlin123 2012-05-09
  • 打赏
  • 举报
回复
可不可以这么理解,就是在Object类定义中的属性中存在String类定义的对象?所以可以直接赋值字符串!
kijioy 2012-05-09
  • 打赏
  • 举报
回复
你可以找一本Java 虚拟机的书来看看
minyunlin123 2012-05-09
  • 打赏
  • 举报
回复
是的!
kijioy 2012-05-09
  • 打赏
  • 举报
回复
你是说底层的实现吗?
minyunlin123 2012-05-09
  • 打赏
  • 举报
回复
是的,所以我就很纳闷为什么String类型的字符串直接能赋值给Object对象??不知道是怎么实现的
kijioy 2012-05-09
  • 打赏
  • 举报
回复
你可以去网上搜一下 java继承
kijioy 2012-05-09
  • 打赏
  • 举报
回复
如果把子类赋值给父类,当然,你能够使用的只有父类的成员
minyunlin123 2012-05-09
  • 打赏
  • 举报
回复
可是有时候子类具有一些自己特有的属性,这时候就应该不能直接给父类对象进行赋值了吧???
minyunlin123 2012-05-09
  • 打赏
  • 举报
回复
可是有的一些子类属性不是父类所具有的,这时候就不能直接给父类赋这些子类特有的值了
kijioy 2012-05-09
  • 打赏
  • 举报
回复
String类是继承Object类,也是Object类型,当然可以赋值
可以在网上找下java对象类型
蘑菇頭 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

java中所有类都是object的派生类(子...类),String也不例外,所以new String("hello")这个对象可以转换成Object类型,System.out.println(对象),会默认调用对象.toString类型,如果子类没有覆写,就会调用Object的toString方法,Java code
public String toString() {
return……
[/Quote]

正解……………… 你查看JDK就知道哦……

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧