关于String类之toString()方法的细节
来源:互联网 发布:大象直播网络直播 编辑:程序博客网 时间:2024/05/21 19:33
Object是所有类的父类,编译器在编译我们的自定义类文件时,会自动将Object类加入到我们的class文件中,toString()是定义在Object中的一个方法,String类是Object的子类,String类重写了这个方法,看java源码:
同样StringBuilder类中也重写了toString()方法:
源码中new了一个String对象,实则是调用了String对象的toString的方法。
例:
public class StringBuilderTest{public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append("It's a beautiful night!");sb.append("so cool.");System.out.println(sb); //It's a beautiful night!so cool.}}
前面都是前奏,下面主角登场了:
class Fruit<T> //filename Apple.java 此例来自李刚老师的《疯狂java讲义》一书{private T info;public Fruit(){}public Fruit(T info){this.info = info;}public T getInfo(){return info;}}public class Apple extends Fruit{//overridepublic Apple(String name){super(name);}public String getInfo(){//获取其运行时类型//System.out.println(super.getInfo().getClass()); 为java.lang.Stringreturn super.getInfo();}public static void main(String[] args) {Apple a = new Apple("banana");System.out.println(a.getInfo());}}使用javac编译上面这个类文件,出现如下错误:
解释:在使用Apple类时,没有传入实际的类型参数,编译器发出了警告:unchecked or unsafe operation。同时产生了一个错误:Object cannot be convered to String,因为在继承时没有像这样(public class Apple extends Fruit<String>{})传入实际的类型参数,编译器在做类型检测时,代码super.getInfo()返回的是Object类型,而在Apple类中的getInfo()方法的返回值是String类型的,Object是不能转型为String类型的(可以自动向上转型,但不能自动向下转型,除非强制类型转换),所以出现了错误。将上面代码中的super.getInfo()改为:
return super.getInfo().toString();
使用toString()方法后,就能通过编译器的类型检测了,super.getInfo()在编译时是一个Object类型的,运行时是String类型的(多态),然后调用String类重写父类的toString()方法,得到了字串"banana"并将其返回,得到最终的打印结果。
OL
- 关于String类之toString()方法的细节
- String 的toString()方法
- String.valueOf(l)方法引发的关于2String、String.valueOf、toString区别的思考
- 关于String 与ToString的问题
- 关于string的一些细节
- 关于String的判断,细节
- Double.ToString 方法 (String)
- public String toString() {}方法
- 关于 java.toString() ,(String),String.valueOf的区别
- 关于 java.toString() ,(String),String.valueOf的区别
- 关于打印未定义toString方法的对象
- 一个关于ToString()方法的小问题
- 关于@Override toString()方法的应用
- 关于toString方法的重写工具ToStringBuilder
- 关于java toString方法的自动调用
- 关于toString()方法的一些看法
- 关于toString方法的重写工具ToStringBuilder
- Java 深究字符串String类(2)之重写toString()方法无意识递归
- 《开发之旅》学习笔记:重力感应事件
- 南阳理工966 选择不相交区间
- ko.js+bootstrap+HibernateBaseDAO 分页——(1)基础分页
- 从一个svg文件中创建一个Document
- 地图转动
- 关于String类之toString()方法的细节
- Android开源项目分类汇总
- 还是逆元之O(n)阶乘逆元。。。
- Hibernate Query Language
- 捕鱼自动打刷游戏记录
- ChartDirector struts统计图之饼图讲解
- 找出linux服务器IO占用高的程序
- mysql允许所有host访问
- Volley框架的流程图分析