Object类中的方法---toString方法

1.观察Object类的toString源码:

 public String toString() {
        return getClass().getName() + "@"+Integer.toHexString(hashCode());
    }

从源码可以看出,toString打印的是一个类的:类路径+@+hashcode值的十六进制

2.子类重写toString方法

显然,父类Object类中的toString方法不能满足子类Student类的需求,所以我们需要在子类中重写toString方法,一般是输出一个对象的成员信息比较合适,**可以采用自动生成的方法,**idea的快捷键是Alt+ins,选择tostring即可, eclipse的快捷键是alt+shift+s再按S

3.如果打印时不调用对象的toString方法,而是直接打印对象,那会输出什么呢?

即:

Student s =new Student();
System.out.println(s);

输出结果:
如果s是基本数据类型,输出的是内容
如果s是对象,则输出的是s的tostring方法
如果Student类没有重写toString方法,打印出来是这样的:

pratice01.Student1@5a07e868

如果Student类重写了toString方法,那打印出来的就是我们重写的样子:

重写的代码:
 @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

输出结果:

Student1{name='null', age=0}

**理由:**为什么会出现这种情况:
我们可以看下println的源码:

				//把对象s传进来
   public void println(Object x) {
   					//调用了valueOf方法
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }
    							//把s传进去
    public static String valueOf(Object obj) {
    //如果s为null,则打印null,如果s不为空,则打印s的toString方法
        return (obj == null) ? "null" : obj.toString();
    }

所以,综上,
如果我们想直接打印出一个对象的成员信息,那么该类就必须重写父类Object的toString方法,没有重写的话打印时调用的是父类的toString方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值