文字列を受け取るメソッドを持つクラスがあります。次に、上記のメソッドの値を返すメソッドがあります。メインクラスで戻り値を取得して出力すると、出力される値は「ExamQuestion@143c8b3」になります。正しく印刷するにはどうすればよいですか?
ありがとう
文字列を受け取るメソッドを持つクラスがあります。次に、上記のメソッドの値を返すメソッドがあります。メインクラスで戻り値を取得して出力すると、出力される値は「ExamQuestion@143c8b3」になります。正しく印刷するにはどうすればよいですか?
ありがとう
「@」の形式を取得する場合は常に、これがオブジェクトのtoString()メソッドのデフォルトの形式です。
呼び出しSystem.out.println(question);呼び出しExamQuestion.toString()。メソッドがオーバーライドされていない場合、スーパークラスのバージョンが呼び出されます。この場合はObjectのバージョンになります。
そのため、ExamQuestion@143c8b3を取得します。
これを修正するには、ExamQuestionクラスに次のメソッドを配置します。
public String toString() {
// return a string that means something here
}
toString()をオーバーライドするExamQuestionが必要です。
これは、@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クラスのためにそれをしなければなりません
表示されている出力は、Java がオブジェクトを文字列として表現する方法です。
デフォルトの動作は次のとおりです。
this.getClass().getSimpleName() + "@" + Integer.toHexString(this.hashCode());
オブジェクトの文字列表現をより明確にしたい場合はtoString()、クラスでメソッドをオーバーライドする必要があります。
すべてのクラスは から (暗黙的に) 継承します。ObjectこれにはtoString()メソッドがあり、その実装によって表示されている出力が生成されます。
意味のある String 表現を得るには、このメソッドをオーバーライドして、クラスに適した実装を提供する必要があります。