zoukankan      html  css  js  c++  java
  • println与toString()

     

      

    public class Test{
            public static void main(String[] args) {
            Mankind mk=new Mankind();
            System.out.println(mk);//打印50
            System.out.println(".......................");
            Person per=mk.new Person();
            per.speak();
            System.out.println(mk.toString());
        }
    }
    
    class Mankind{
        private int old=50;
        public String toString() {
            // TODO Auto-generated method stub
            return "ok";
        }
        class Person {
          void speak() {
            // TODO Auto-generated method stub
              System.out.println("old="+new Mankind());
              System.out.println("old="+Mankind.this);
                   }
            
        }
    }

    下面是解释:

    1、System.out.println(center.toString())这句对应的源码:

    public void println(String x) {
        synchronized (this) {
            print(x); // 打印x
            newLine(); // 换行
     }
    }
    这能看懂吧,直接输出了传进来的参数x(center.toString())
    2、System.out.println(center)这句对应的源码:
    public void println(Object x) {
            String s = String.valueOf(x); // x对象转换为String
            synchronized (this) {
                print(s);
                newLine();
            }
        }
     主要看String s = String.valueOf(x);这句,然后再看看是怎么把对象x转换为String的,
     String.valueOf(x)对应的源码:
     public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
        }
      这下看到了吧,把刚才那x(也就是你的center)转换为String是调用了obj.toString()得到
      的。
      所以"直接输出对象时,会默认调用对象toString()方法"
      3、我把 toString 改成 tostring 其变输出 ClassRoom@7150bd4d
      这里就直接调用到Object.toString()方法了,看看这方法的源码:
      public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
        这下知道为啥输出ClassRoom@7150bd4d了吧。
  • 相关阅读:
    【原】yield的最基本用法
    【转】C#.net拖拽实现获得文件路径
    【原】.Net之美学习笔记-第1章-1.1.1值类型
    【转】怎样将DataGridView中绑定的表的列名改成中文
    【转】WPF获取外部EXE图标最简单的方法
    【转】C# Excel 导入到 Access数据库表(winForm版)
    【转】SQL2008清除日志
    【原】监视程序运行时间
    【转】MSSQL获取指定表的列名信息,描述,数据类型,长度
    【原】接口
  • 原文地址:https://www.cnblogs.com/NeilLing/p/4020471.html
Copyright © 2011-2022 走看看