2012-03-19 2 views
2

これは簡単なJavaプログラムです。それには "Student"というクラスが含まれていて、その2つのオブジェクトをstud1としています。同様に、値が "Hello"であるStringオブジェクト "a"も作成しました。Java- Stringオブジェクトとユーザー定義オブジェクトの違い

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); 
    } 

} 

私たちは、クラスのオブジェクトを作成するときに私たちが知っているように、それはちょうど私がスタッドとstud1を印刷しようとしたときに「」であるので、なぜ私は二つの基準values.Butを取得していますobject.Thatそのための基準値を保持していますクラスStringのオブジェクト値 "Hello"ではなく参照値を期待する必要があります。

+3

"Hello"は既にストリングであるため、新しいString()は不要です。 –

答えて

4

このライン

System.out.println(stud); 

文字列を印刷するときに、文字や数字の束よりも意味の何かを得るObject.toString方法overridesStringので

System.out.println(stud.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 demoStudenttoStringを上書きし、あなたのコードを実行のためです。

さらに読書:

のドキュメント1)U null以外のスタッドがnullの場合

+0

おそらく、次のように実装することでこれを行うことができます:return "My age is:" + age; –

+0

実際には、 'stud.toString()'ではなく、 'Straing.valueOf(stud)'ではなく、ヌルオブジェクトでは 'stud.toString()'が呼び出されます。 – Betlista

1

System.out.println()オブジェクトを渡すと、オブジェクトをtoString()メソッドを呼び出して何かを出力できます。 ObjectにはデフォルトのtoString()メソッドがあり、これはtoString()メソッドをオーバーライドしていないため、Studentオブジェクトに対して呼び出されるものです。しかし、文字列は明白な方法で定義されたtoString()を持っているので、オブジェクトのそのカスタム文字列表現を出力しています。すなわち、文字列の値。

1

System.out.println(Object)を呼び出すと、そのオブジェクトのtoString()メソッドが呼び出されます。 Studentに実装されていないので、参照値を出力するObject.toString()が呼び出されます。

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

コンパイルされません。文字列を返す必要があります。感謝@aioobe。 – aioobe

+0

エラー。 – Kal

0

と呼ばれ、文字列「こんにちは」を印刷しているのtoString()方法 - 、意味のある値を印刷するようなので、それを上書きする

あなたの学生のクラスは、ちょうどすべてのJavaオブジェクトに継承され、toString()メソッド、オーバーライドしない
4

あなたがSystem.out.println(x)を呼び出すと、文字列の出力は、オブジェクトの.toString()ですそれに渡された。

もちろんString.toString()は文字列そのものなので、"Hello"と期待しています。

クラスは.toString()メソッドが定義されていない(ない)、親のために定義され.toString()型/クラスに基づく値とhashCode()のを印刷に使用される、(Objectクラスである)場合オブジェクト。

+1

+1のためのhashCode – JohnnyK

0

単純に、PrintStreamクラス内にprintln(Object obj)メソッドがあります(System.outはPrintStreamのインスタンスです)。その実装内にはobj.toString()があります。任意のオブジェクトのtoString()をオーバーライドして、文字列の収量をフォーマットしてSystem.out.println(Object obj)を呼び出すことができます。

関連する問題