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了吧。

时间: 2024-10-10 01:30:32

println与toString()的相关文章

java中的toString

对于toString方法,存在于API中的java.lang.String类中,API中告诉的该方法返回的是对象本身(该对象已经是一个字符串了).在默认情况下,该方法返回的是类名的原路径[email protected]+对象的哈希值无符号十六进制表示形式.而对于String,该类已经重写了toString方法,所以不需要我们再继续重写该方法直接调用就能够正确返回正确的字符串.而在大多数情况下,我们希望在我们自己的类中重写toString方法来返回我们想得到的对象信息.下面举一个简单的例子: 1

java基础-toString(方法)

示例代码 package com.runoob.test; class Cap{ String name; int age; public String toString(){ return "我的姓名:"+name+"我的年龄:"+age; } } public class A6_10{ public static void main(String[] args){ Cap one = new Cap(); one.name="小明"; one

原!! java直接打印一个对象时,并不是直接调用该类的toString方法 ,而是会先判断是否为null,非null才会调用toString方法

网上看了好多java直接打印一个对象时,直接调用该类的toString方法 . 但是: Object obj=null; System.out.println(obj);//没有报错 System.out.println(obj.toString());//报空指针异常 System.out.println(obj);既然也是直接调用toString方法,为什么不报错??? 原因总结如下: 1.调用Object类的toString方法,必须保证object不是null值,否则将抛出NullPoi

String、String.valueOf、toString 它们三者的区别总结

今天在使用这个的时候发现,他们三者好像在某些场所都是可以用的,但是不免会让人想到那既然它们三者这么的相似,那么总有些什么区别吧.我也在网上找了一些资料看.自己也看了API文档,就将他们三的区别总结一下吧.用了这么长时间,才发现有这些的不同,也是挺惭愧的. 先说他们三的作用是什么吧:没什么特别的作用,就是让我们得到的对象或参数类型,按照要求转成字符串的形式. String:毫无疑问,这种就是强转形式,简单方便,效率高.java程序员可能看到效率高或许有些激动,但是它有他的不好,那就是局限性.在ja

toString结果

String[] str = new String[] { "a", "b", "c" }; System.out.println(str); System.out.println(str.toString()); 控制台输出结果如下: [Ljava.lang.String;@1db9742[Ljava.lang.String;@1db9742

java 数组的 toString 方法和 equals 方法以及 java.lang.Object 对象的 toString 方法和 equals 方法

1 public class Test { 2 public static void main(String[] args) { 3 int[] a = {1, 2, 4, 6}; 4 int[] b = a; 5 int[] c = {1, 2, 4, 6}; 6 7 //下面这个方法打印的是a数组的引用地址 8 System.out.println(a.toString()); 9 //下面这个方法比较的是两个数组的引用是否相等 10 System.out.println("a.equals

object 类 toString() 和 equals() 的覆写

基本作用: objiect类是所有类的父类. 任何一个类定义的时候如果没有明确定义了父类的话,默认父类是Object类. class A extends Object{} 在整个java里面,类的继承关系一直存在的.例如: String 类 这时候一个好处就出现了,利用Object类可以接受一切类. Object obj = new Book() ://向上转型 Obect obj = “Hello”  : //向上转型 如果不知道参数类型的时候,使用Object是最好的选择 http://do

基础学习day08---多态、简单工厂、Object类equals和toString

一.多态 1.1.多态概念 定义:某一类事物的多种存在形态.        例:动物中猫,狗.    猫这个对象对应的类型是猫类型:猫 x = new 猫();    同时猫也是动物中的一种,也可以把猫称为动物:动物  y = new 猫();    动物是猫和狗具体事物中抽取出来的父类型.    父类型引用指向了子类对象. 体现:    父类或者接口的引用指向或者接收自己的子类对象. 作用:    多态的存在提高了程序的扩展性和后期可维护性.        前提:    1. 需要存在继承或者

JAVA toString方法

在JAVA中,所有的对象都有toString方法: 创建类时没有定义toString方法,输出对象时,会输出对象的哈希值: 它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法 它通常只是为了方便输出: 例如: public class Test2{ String name; int age; public String toString(){ return "我的姓名是:"+name+"\t我的年龄是:"+age; } public s