簡體   English   中英

為什么已經存在“ println(Object x)”時為什么需要“ println(char [] x)”-Java

[英]why need of “println(char[] x)” when there is already “println(Object x)” - java

我在閱讀有關println函數的信息時,發現有println(char [] x)println(Object x)
https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(char [])

我的問題是:由於Java中的數組是對象,因此有必要用char [] 專門重載println(),而像int []等其他數組則需要使用println(Object x)重載函數。

 println(Object x)

如果使用它來打印一個char數組(char數組是一個對象),它將不會打印內容,而是objectClass @ hashcode樣式。 您可以自己對其進行測試以查看確切的輸出。

因為它們的實現方式不同。

println(Object)

將(在檢查null等之后),調用參數的toString()方法並顯示其結果。

數組的toString()方法沒有用:它將為您提供數組類型和數組的哈希碼。 因此,在使用char[]參數的情況下,重載形式提供了更有用的實現。

請注意,對於大多數對象類型, toString()方法可以被覆蓋(因此不必為每種可能的類型重載println(...)方法(或可能...)。但是, toString()方法不能被數組覆蓋,因此在這種情況下重載println有好處。

因為它將char數組打印為字符串,否則以對象形式打印,因此查看內容可能更方便。 您可以先嘗試將其投射到對象上,然后看看有什么不同。

因為print/ln(char[])處理字符的實際打印,所以數組對象本身的toString()仍然提供通常的type + hash輸出,而不管字符數組如何

char c[]={'a','b','c'};
Object o=c;
System.out.println(c);
System.out.println(c.toString());
System.out.println(o); // *
System.out.println(o.toString());

*事情很有趣(這就是為什么我要發布,因為其余內容已經在其他答案中發布了),因為它表明Java具有單一調度:要調用的實際方法是在編譯時根據所聲明的來確定的。參數的類型。 因此,在運行時o是一個字符數組並不重要,在編譯時它似乎是一個Object ,因此將為此調用print/ln(Object)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM