繁体   English   中英

toString是否也调用了原始类型?

[英]Is toString called for primitive types also?

我知道每当我们打印一个对象时都会在Java调用toString ,而这默认是在Object类中定义的,它是所有类的超类。

但是,我的老师说当我们打印一些primitive typeint, char等)时也会调用toString

真的吗 ?

是的,但不是你预期的那种意义。

System.out.println(someInt)

只是一个print包装,也增加了一条线。

System.out.print(someInt)

电话

String.valueOf(someInt)

反过来打电话

Integer.toString(someInt)

这是Integer类中的静态方法 ,它返回表示指定整数的String对象 这种方法是一样的Integer#toString()即其转换整数对象到表示其int值的字符串的实例方法。

someInt.toString()将无法工作,因为someInt不会扩展Object因为它不是一个对象。

让我们看看System.out.print(int)是如何工作的。 根据System API System.out是一个PrintStream

public static final PrintStream out

PrintStream src中我们可以看到它如何打印整数:

public void print(int i) {
    write(String.valueOf(i));
}

这是来自String src的String.valueOf(int)

public static String valueOf(int i) {
    return Integer.toString(i);
}

如果您考虑以下代码

System.out.println(5); 

以下事情将会发生

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

将调用PrintStream类中的函数,该函数在内部将调用print(x)函数,如下所示 -

public void print(int i) {
    write(String.valueOf(i));
}

现在如果你在String类中看到valueOf()函数

public static String valueOf(int i) {
    return Integer.toString(i);
}

Integer.toString(i)是你的老师通过调用toString()方法的意思。

原语被自动装箱到它们各自的对象类型。 所以toString()会调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM