這篇文章主要講解了“怎么打印數組”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么打印數組”吧!

“哥,之前聽你說,數組也是一個對象,但 Java 中并未明確的定義這樣一個類?!笨磥砣糜性谟眯牡貙W習。
“是的,因此數組也就沒有機會覆蓋 Object.toString() 方法。如果嘗試直接打印數組的話,輸出的結果并不是我們預期的結果?!蔽医又玫脑捓^續說。
“那怎么打印數組呢?”三妹心有靈犀地把今天的核心問題提了出來。
“首先,我們來看一下,為什么不能直接打印數組,直接打印的話,會出現什么問題?!?/p>
來看這樣一個例子。
String [] cmowers = {"沉默","王二","一枚有趣的程序員"}; System.out.println(cmowers);程序打印的結果是:
[Ljava.lang.String;@3d075dc0
[Ljava.lang.String; 表示字符串數組的 Class 名,@ 后面的是十六進制的 hashCode——這樣的打印結果太“人性化”了,一般人表示看不懂!為什么會這樣顯示呢?查看一下 java.lang.Object 類的 toString() 方法就明白了。
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }再次證明,數組雖然沒有顯式定義成一個類,但它的確是一個對象,繼承了祖先類 Object 的所有方法。
“哥,那為什么數組不單獨定義一個類來表示呢?就像字符串 String 類那樣呢?”三妹這個問題讓人頭大,但也好解釋。
“一個合理的說法是 Java 將其隱藏了。假如真的存在這么一個類,就叫 Array.java 吧,我們假想一下它真實的樣子,必須得有一個容器來存放數組的每一個元素,就像 String 類那樣?!币贿吇卮鹑?,我一邊打開了 String 類的源碼。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; }“最終還是要用類似一種數組的形式來存放數組的元素,對吧?這就變得很沒有必要了,不妨就把數組當做是一個沒有形體的對象吧!”
“好了,不討論這個了?!蔽遗略掝}扯遠了,扯到我自己也答不出來就尷尬了,趕緊把三妹的思路拽了回來。
“我們來看第一種打印數組的方法,使用時髦一點的 Stream 流?!?/p>
第一種形式:
Arrays.asList(cmowers).stream().forEach(s -> System.out.println(s));
第二種形式:
Stream.of(cmowers).forEach(System.out::println);
第三種形式:
Arrays.stream(cmowers).forEach(System.out::println);
打印的結果如下所示。
沉默 王二 一枚有趣的程序員
沒錯,這三種方式都可以輕松勝任本職工作,并且顯得有點高大上,畢竟用到了 Stream,以及 lambda 表達式。
“當然了,也可以使用比較土的方式,for 循環。甚至 for-each 也行?!?/p>
for(int i = 0; i < cmowers.length; i++){ System.out.println(cmowers[i]); } for (String s : cmowers) { System.out.println(s); }“哥,你難道忘了上一篇在講 Arrays 工具類的時候,提到過另外一種方法 Arrays.toString() 嗎?”三妹看我一直說不到點子上,有點著急了。
“當然沒有了,我認為 Arrays.toString() 是打印數組的最佳方式,沒有之一?!蔽业那榫w有點激動。
Arrays.toString() 可以將任意類型的數組轉成字符串,包括基本類型數組和引用類型數組。該方法有多種重載形式。

使用 Arrays.toString() 方法來打印數組再優雅不過了,就像,就像,就像蒙娜麗莎的微笑。
(三妹看到這么一副圖的時候忍不住地笑了)
“三妹,你不要笑,來,懷揣著愉快的心情看一下代碼示例?!?/p>
String [] cmowers = {"沉默","王二","一枚有趣的程序員"}; System.out.println(Arrays.toString(cmowers));程序打印結果:
[沉默, 王二, 一枚有趣的程序員]
哇,打印格式不要太完美,不多不少!完全是我們預期的結果:[] 表明是一個數組,, 點和空格用來分割元素。
“哥,那如果我想打印二維數組呢?”
“可以使用 Arrays.deepToString() 方法?!?/p>
String[][] deepArray = new String[][] {{"沉默", "王二"}, {"一枚有趣的程序員"}}; System.out.println(Arrays.deepToString(deepArray));打印結果如下所示。
[[沉默, 王二], [一枚有趣的程序員]]
“說到打印,三妹,哥給你提醒一點。阿里巴巴的 Java 開發手冊上有這樣一條規約,你看?!?/p>

“什么是 POJO 呢,就是 Plain Ordinary Java Object 的縮寫,一般在 Web 應用程序中建立一個數據庫的映射對象時,我們稱它為 POJO,這類對象不繼承或不實現任何其它 Java 框架的類或接口?!?/p>
“對于這樣的類,最好是重寫一下它的 toString() 方法,方便查看這個對象到底包含了什么字段,好排查問題?!?/p>
“如果不重寫的話,打印出來的 Java 對象就像直接打印數組的那樣,一串誰也看不懂的字符序列?!?/p>
“可以借助 Intellij IDEA 生成重寫的 toString() 方法,特別方便?!?/p>
“好的,哥,我記住了。以后遇到的話,我注意下。你去休息吧,我來敲一下你提到的這些代碼,練一練?!?/p>
“OK,我走,我走?!?/p>
感謝各位的閱讀,以上就是“怎么打印數組”的內容了,經過本文的學習后,相信大家對怎么打印數組這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。