使用System.out.print/prilntln() 輸出時存在的問題


  剛學習Java時第一個接觸的method就是System.out.println() 方法。但是最近在使用它輸出一些變量時出現了我不理解的現象,首先上代碼:

  

 1 /*
 2 *
 3 * using method System.out.println/print
 4 *
 5 *
 6 */
 7 class Student{
 8 
 9     String name ;
10     Student(String name){
11         this.name = name ;
12     }
13     void show (){
14         System.out.println("name is :" + name );
15     }
16 
17 }
18 public class TestOutString {
19 
20 public static void main(String[] args){
21     int varInt = 1 ;
22     char varChar = 'h';
23     String varString = "hello world !";
24     int[] intArray = {1,2,3};
25     char[] charArray = {'1','2','3','4'};
26     Student studentObject = new Student("first");
27     Student[] studentArray = {new Student("1"),new Student("2"),new Student("3")};
28     String[] stringArray = {"1","2","3","4"};
29     boolean[] booleanArray = {true , false , true , false};
30     
31     
32     System.out.println(varInt);
33     System.out.println(varChar);
34     System.out.println(varString);
35     System.out.println(intArray);
36     System.out.println(charArray);
37     System.out.println(studentObject);
38     System.out.println(studentArray);
39     System.out.println(stringArray);
40     
41     /*
42     Result :
43     
44             1
45             h
46             hello world !
47             [I@54477b4e
48             1234
49             Student@20f0691c
50             [LStudent;@784be29
51             [Ljava.lang.String;@1be0799a
52             
53     Question : 
54     
55     we will get different value by using method--'System.out.println/print' 
56     
57     to output some variables with different type
58     
59     */

由上程序可以看出:

  使用System.out.println()輸出基本數據類型和char數組時正常,但是在輸出int、string、object、object數組、Boolean數組時出現只輸出類似   '類名 @ 一串十六進制的數'  的字符串。發現原因有以下幾點:

  1. System.out.println()(是PrintStream類的成員方法)方法只提供了以下幾種數據類型輸出的重載函數:

  

  所以我們在輸出  boolean 、 char 、char【】 、 double 、float 、int 、 long 數據時會輸出其對應的值。對於object的輸出System.out.println方法會首先調用其     toString方法,然后將該對象的toString方法的返回值輸出。關於toString方法的具體輸出會在下面說明。

2. 由於System.out.println沒有對int[] 、String[] 、 object[] 數組輸出的重載函數,所以在使用該方法輸出這些數據類型時,該方法會將其中的參數作數組首元素來對待。也就  是說,System.out.println(intArray) 等價於   System.out.println(intArray[0])。然后調用數組首元素的toString方法,並將其輸出。

  toString()方法:

    是所有對象的超類,它的功能是返回一個字符串,這個字符串由  調用它的類的類名 + @ + 調用它的類的哈希值十六進制表示形式  組成。

    即 :getClass().getName() + '@' + Integer.toHexString(hashCode())

  由以上兩個原因應該可以得到上面輸出結果是由什么導致的了。

 

那么如何讓我定義的數據直接通過System.out.println輸出其值呢 ?

 

我認為:

 對於System.out.println()支持的數據類型例如: int 、 double、char【】 等可以直接輸出其值。

對於Object類型的數據,可以重寫它的toString() 方法,按照自己的想法輸出。因為System.out.println輸出object類型值時就是調用其toString方法。

對於System.out.println不支持的數據類型例如 : int[] / double[] / String[] /boolean 等,可以使用類集,例如 ArrayList等,

1 ArrayList<Integer> intList = new ArrayList<Integer>();
2 intList.add(1);
3 intList.add(2);
4 intList.add(3);
5 intList.add(4);
6 System.out.println(intList);

這樣就可以輸出其值

當然如果你對這樣的輸出不夠滿意,也同樣可以重寫ArrayLIst等類集框架的toString方法,因為System.out.println方法在輸出ArrayList等類集變量時就是調用其toString方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM