0

文字列を受け取るメソッドを持つクラスがあります。次に、上記のメソッドの値を返すメソッドがあります。メインクラスで戻り値を取得して出力すると、出力される値は「ExamQuestion@143c8b3」になります。正しく印刷するにはどうすればよいですか?

ありがとう

4

5 に答える 5

2

「@」の形式を取得する場合は常に、これがオブジェクトのtoString()メソッドのデフォルトの形式です。

呼び出しSystem.out.println(question);呼び出しExamQuestion.toString()。メソッドがオーバーライドされていない場合、スーパークラスのバージョンが呼び出されます。この場合はObjectのバージョンになります。

そのため、ExamQuestion@143c8b3を取得します。

これを修正するには、ExamQuestionクラスに次のメソッドを配置します。

public String toString() {
    // return a string that means something here
}
于 2013-02-07T04:58:28.773 に答える
2

toString()をオーバーライドするExamQuestionが必要です。

于 2013-02-07T04:53:49.960 に答える
1

これは、@ValekHalfHeartが彼の回答で説明したデフォルトの動作です。

toStringオブジェクトを印刷したい場合は、クラスのメソッドをオーバーライドする必要があります。

私がこのコードを持っているとしましょう:

class MyClass{
   int a,b;
}

したがって、このクラスのオブジェクトを作成して、次のクラスに渡すと、次のようになりprintlnます。

public static void main(String args[]){
  MyClass m = new MyClass();
  m.a = 20;
  m.b = 30;
  System.out.println(m);
}

MyClass@143c8b3それはあなたの場合のように何かを印刷します。

したがって、オブジェクトを渡すたびにprintln、変数の値のようなものを出力し、出力する必要がaありbます。

tostring次に、メソッドをオーバーライドする必要がありますMyClass

class MyClass{
   int a,b;

   public String toString(){
     return "MyClass values: a = "+a+" and b = "+b;
   }
}

だから今私がこれを言うとき

public static void main(String args[]){
  MyClass m = new MyClass();
  m.a = 20;
  m.b = 30;
  System.out.println(m);
}

その印刷する予定MyClass values: a = 20 and b = 30

だからあなたはあなたのExamQuestionクラスのためにそれをしなければなりません

于 2013-02-07T05:04:52.220 に答える
1

表示されている出力は、Java がオブジェクトを文字列として表現する方法です。

デフォルトの動作は次のとおりです。

this.getClass().getSimpleName() + "@" + Integer.toHexString(this.hashCode());

オブジェクトの文字列表現をより明確にしたい場合はtoString()、クラスでメソッドをオーバーライドする必要があります。

于 2013-02-07T04:56:31.007 に答える
0

すべてのクラスは から (暗黙的に) 継承します。ObjectこれにはtoString()メソッドがあり、その実装によって表示されている出力が生成されます。

意味のある String 表現を得るには、このメソッドをオーバーライドして、クラスに適した実装を提供する必要があります。

于 2013-02-07T05:01:22.090 に答える