![](/img/trans.png)
[英]How are primitive types represented in the system? (Integer.toString(int) as example)
[英]Is toString called for primitive types also?
我知道每当我们打印一个对象时都会在Java
调用toString
,而这默认是在Object
类中定义的,它是所有类的超类。
但是,我的老师说当我们打印一些primitive type
( int, 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.