簡體   English   中英

Java- String對象和用戶定義對象之間的區別

[英]Java- difference between String object and user defined objects

這是一個簡單的java程序。 它包含一個“學生”類,我們正在制作它的兩個對象stud,stud1。 類似地,我也創建了一個String對象“a”,其值為“Hello”。

class Student{

  int age;

  public void setAge(int age){
    this.age=age;
  }

  public int getAge(){
    return age;
  }
}


class Hello{

  public static void main(String args[]){

    Student stud= new Student();
    Student stud1= new Student();
    stud.setAge(15);
    int i=stud.getAge();
    String a=new String("Hello");
    System.out.println(stud);
    System.out.println(stud1);
    System.out.println(a);
  }

}

正如我們所知,當我們創建一個類對象時,它只保存該對象的引用值。這就是為什么當我嘗試打印stud和stud1時,我得到兩個引用值。但是因為“a”是類String的對象我們應該期待參考值而不是值“Hello”。為什么會發生?

這條線

System.out.println(stud);

等於1

System.out.println(stud.toString());

由於String 會覆蓋 Object.toString方法,因此在打印字符串時,您會獲得比一堆字符和數字更有意義的內容。

您也可以讓用戶定義的類也這樣做。 在您的Student課程中,它看起來像這樣:

class Student{

    int age;

    public void setAge(int age){
        this.age=age;
    }

    public int getAge(){
        return age;
    }

    @Override
    public String toString() {              // Called for instance when
        return "Student with age " + age;   // the student should be printed
    }
}

這是一個ideone.com演示,用於運行代碼,其中Student覆蓋toString

進一步閱讀:

1)除非螺栓等於零

當您調用System.out.println(x) ,String輸出是傳遞給它的對象的.toString()

當然, String.toString()是字符串本身,所以你期望"Hello"

如果你的類沒有定義.toString()方法(並且沒有),則使用為其父類定義的.toString() (是Object類),它根據類型/類打印一個值。對象的hashCode()

當您將System.out.println()作為一個對象時,它將調用該對象的toString()方法,以便能夠打印出一些東西。 Object有一個默認的toString()方法,這就是你的Student對象調用的內容,因為你沒有覆蓋toString()方法。 但是,字符串必須以明顯的方式定義toString(),因此它打印出對象的自定義字符串表示; 即,字符串的值。

當您調用System.out.println(Object) ,將調用該System.out.println(Object)toString()方法。 由於您沒有為Student實現一個,因此調用Object.toString()來打印參考值。

要打印有意義的值,請像這樣覆蓋它 -

@Override
public String toString() {
    return "Age = " + age;
}

調用a的toString()方法並打印字符串“Hello”。

你的學生班只是不要覆蓋每個java對象繼承的toString()方法:

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#toString ()

簡單地說, PrintStream類中有println(Object obj)方法(System.out是PrintStream的一個實例),在它的實現中有obj.toString() 您可以覆蓋任何對象的toString() ,以通過調用System.out.println(Object obj)來格式化字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM