Java中Object的輸出問題


今天一個同學讀取List<Object>中的一個對象,直接用於輸出。輸出結果是Student@c17164,現在來分析一下哈。

1.Object類

  類Object是類層次結構的根類。每個類都使用Object作為超類。所有對象(包括數組)都實現這個類的方法。 

2.Object類的toString()方法

  public String toString()
  返回該對象的字符串表示。通常,toString 方法會返回一個“以文本方式表示”此對象的字符串。結果應是一個簡明但易於讀懂。建議所有子類都重寫此方法。Object 類的 toString 方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符“@”和此對象哈希碼的無符號十六進制表示組成。

  換句話說,該方法返回一個字符串,它的值等於:getClass().getName() + '@' + Integer.toHexString(hashCode())

3.System.out.print

  (1)System.out得到的是一個Static PrintStream靜態類。

  (2)PrintStream中的方法public void print(Object obj)

   打印對象。按照平台的默認字符串編碼將 String.valueOf(Object) 方法生成的字符串轉換為字節,並完全以 write(int) 方法的方式寫入這些字節。

   其實還是調用toString方法,也就是執行System.out.println(obj);與System.out.println(obj.toString());方法的結果是一樣的。

4.代碼示例

public class ObjectTest{ 
    public static void main(String[] args) { 
        //處理常見數據類型
        String text="22";
        System.out.println(text);    //輸出:22
            
        //處理Student對象,沒有重寫toString()方法
        Student stu=new Student("學生");
        System.out.println(stu);    //輸出:Student@c17164
        System.out.println(stu.name);    //輸出:學生
        
        //處理Teacher對象,重寫toString()方法
        Teacher tea=new Teacher("老師");
        System.out.println(tea);    //輸出:老師
        System.out.println(tea.name);    //輸出:老師
    }
}

//Student類
class Student{
    String name;
    public Student(String name) {
        this.name = name;
    }
}

//Teacher類
class Teacher{
    String name;
    public Teacher(String name) {
        this.name = name;
    }
    public String toString()
    {
        return name;
    }
}

5.總結

  上例中,Student類沒有重寫toString()方法,輸出對象結果為:Student@c17164

  上例中,Teacher類重寫toString()方法,輸出對象結果為:老師

  Double,String,Integer等java自帶的類都重寫了Object超類的toString()方法,可以直接輸出其中內容。

   在程序中要直接輸出類對象,可以在類中重寫toString()方法,定制自己的輸出。


免責聲明!

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



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