Java--输出对象默认调用toString方法

博客通过一个小例子,引导读者观察输出结果。随后查看println方法源码,找到参数为String和Object类型的部分,分析Object类型参数先经String.valueOf()转换为String类型,再解释例子中主函数输出语句调用对象类toString方法等的输出原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来观察观察下面这个小例子

package com.string;

public class ToStringTest {
    static int i = 1;
    public static void main(String args[]){
        System.out.println("love " + new ToStringTest());
        ToStringTest a = new ToStringTest();
        a.i++;
        System.out.println("me " + a.i);
    }
    public String toString(){
        System.out.print("I ");//I
        return "java ";
    }
}

输出结果:

I love java 
me 2

是不是和你预期的结果一样呢?


我们一起来看一看为什么是这样的结果。

查看println方法的源码
找到参数分别是String和object类型的源码


    public void println(String x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }


    public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }

可以看到当参数为Object类型的时候先调用String.valueOf()方法,将object类型转换程String类型。再看valueOf源码

    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

如果obj为空的话,返回null,否则返回obj.toString()。


现在再来解释上面例子
主函数中输出语句里扫描出有对象,所以先调用了该对象类中的toString方法,输出了("i "),然后输出love,接着是String函数,返回返回值 java。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值