[英]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.