zoukankan      html  css  js  c++  java
  • Java源代码阅读-Object.toString()

    关于Object中的toString()


    先来看一个简单的基类 Parent,它有一个toString()方法

    public class Parent{
    	
    	public String toString(){
    		return "Parent";
    	}
    }
    

    然后you一个派生类Child继承Parent,它重载了基类ParenttoString().

    public class Child{
    
    	public String toString(){
    		reuturn "Child";
    	}
    	
    	public void get(){
    		System.out.println(this);
    		System.out.println(new Child());
    	}
    
    	public static void main(String[] args){
    		new Child().get();
    	}
    }
    

    然后执行Child的main方法得到结果如下:

    Child
    Child

    Child通过 new 调用 get()方法分别打印 thisnew Child().它们都是调用了ChildtoString()方法,所以输出结果相同.

    如果注释掉Child派生类的toString()方法,再执行main方法之后,输入结果如下:

    Parent
    Parent

    此时Child通过 new 调用 get()方法分别打印 thisnew Child().它们都是调用了ParenttoString()方法.

    再做进一步的测试,注释掉Parent基类的toString()方法.查看输出结果如下:

    com.B@15db9742
    com.B@6d06d69c

    这些又是从哪里来的呢?我们知道Java所有类都有一个总基类就是Object,查看源代码之后我们在Object中找到如下toString()方法.

    //注释省略
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    

    从源代码中我们可以得到打印结果的组成方式.由类型的完整相对路径加@符号再加上一段通过Integer.toHexString()处理哈希玛hashCode()得到的一组字符串组成.实际打印语句可以看成是:
    System.out.println(new B().getClass().getName() + "@" + Integer.toHexString(new B().hashCode()));.

    从以上简单的测试中可以看到,如果想直接打印一个类型的实例时,实际上这个实例调用的ObjecttoString()方法.

    此时,我又在想为什么打印一个类型的实例时,会调用toString()方法呢?

  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/baininghan/p/3876290.html
Copyright © 2011-2022 走看看