您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么打印數組”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么打印數組”吧!
“哥,之前聽你說,數組也是一個對象,但 Java 中并未明確的定義這樣一個類。”看來三妹有在用心地學習。
“是的,因此數組也就沒有機會覆蓋 Object.toString() 方法。如果嘗試直接打印數組的話,輸出的結果并不是我們預期的結果。”我接著三妹的話繼續說。
“那怎么打印數組呢?”三妹心有靈犀地把今天的核心問題提了出來。
“首先,我們來看一下,為什么不能直接打印數組,直接打印的話,會出現什么問題。”
來看這樣一個例子。
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 流。”
第一種形式:
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 也行。”
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() 是打印數組的最佳方式,沒有之一。”我的情緒有點激動。
Arrays.toString() 可以將任意類型的數組轉成字符串,包括基本類型數組和引用類型數組。該方法有多種重載形式。
使用 Arrays.toString() 方法來打印數組再優雅不過了,就像,就像,就像蒙娜麗莎的微笑。
(三妹看到這么一副圖的時候忍不住地笑了)
“三妹,你不要笑,來,懷揣著愉快的心情看一下代碼示例。”
String [] cmowers = {"沉默","王二","一枚有趣的程序員"}; System.out.println(Arrays.toString(cmowers));
程序打印結果:
[沉默, 王二, 一枚有趣的程序員]
哇,打印格式不要太完美,不多不少!完全是我們預期的結果:[] 表明是一個數組,, 點和空格用來分割元素。
“哥,那如果我想打印二維數組呢?”
“可以使用 Arrays.deepToString() 方法。”
String[][] deepArray = new String[][] {{"沉默", "王二"}, {"一枚有趣的程序員"}}; System.out.println(Arrays.deepToString(deepArray));
打印結果如下所示。
[[沉默, 王二], [一枚有趣的程序員]]
“說到打印,三妹,哥給你提醒一點。阿里巴巴的 Java 開發手冊上有這樣一條規約,你看。”
“什么是 POJO 呢,就是 Plain Ordinary Java Object 的縮寫,一般在 Web 應用程序中建立一個數據庫的映射對象時,我們稱它為 POJO,這類對象不繼承或不實現任何其它 Java 框架的類或接口。”
“對于這樣的類,最好是重寫一下它的 toString() 方法,方便查看這個對象到底包含了什么字段,好排查問題。”
“如果不重寫的話,打印出來的 Java 對象就像直接打印數組的那樣,一串誰也看不懂的字符序列。”
“可以借助 Intellij IDEA 生成重寫的 toString() 方法,特別方便。”
“好的,哥,我記住了。以后遇到的話,我注意下。你去休息吧,我來敲一下你提到的這些代碼,練一練。”
“OK,我走,我走。”
感謝各位的閱讀,以上就是“怎么打印數組”的內容了,經過本文的學習后,相信大家對怎么打印數組這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。