System.out.println(Array)無法列印出Array內容?!
錯誤示範:直接列印陣列
public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers);
}
}
// output: [I@1b6d3586
Array 屬於參考資料型態,因此存取陣列時,變數實際上是指向儲存陣列資料的記憶體位址。
使用System.out.println(array)
直接列印一個陣列時,並不會顯示陣列的內容,而是會輸出類似於[I@1b6d3586 的字串。
這是因為 在 Java 中,陣列是一個Object,當你直接將陣列傳遞給 System.out.println() 時,Java 會呼叫這個Object的 toString() 方法。Object.toString()
預設會回傳一個字串,包含類型名稱與物件的記憶體位址(或物件的雜湊碼)。例如 [I@1b6d3586 中,[I 代表這是一個整數類型的陣列,@1b6d3586 是陣列的記憶體位址。
為了列印完整的Array內容,Java 提供了 Arrays.toString()
和 Arrays.deepToString()
方法來生成一個包含陣列元素的字串,而不是僅僅列印物件的記憶體地址。
Arrays.toString()(一維陣列)
toString()位於 java.util 包內,因此我們需要在程式碼中匯入 java.util.Arrays
才能使用 toString() 方法。
toString() 方法接受一個陣列作為引數,將該陣列轉換為字串並返回。對於整數陣列,toString() 會將陣列中的每個元素轉換為字串,並以預設的格式 [元素1, 元素2, ...] 來呈現。
例如:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(numbers)); // 會列印陣列的內容
}
}
// output: [1, 2, 3, 4, 5]
Arrays.deepToString()(多維陣列)
當使用 Arrays.toString()
列印多維陣列(如二維或三維陣列)時,它只會將內部的陣列視為Object並輸出記憶體位址,而不會展開列印內部的內容,因此需要使用deepToString()
。
import java.util.Arrays;
public class PrintArray {
public static void main(String[] args) {
int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
// 試試使用toString列印多維陣列會發生什麼事
System.out.println(Arrays.toString(matrix));
System.out.println(Arrays.deepToString(matrix));
}
}
// output: [[I@1f32e575, [I@279f2327, [I@2ff4acd0]
// output: [[1, 2], [3, 4], [5, 6]]