文字列を受け取るメソッドを持つクラスがあります。次に、上記のメソッドの値を返すメソッドがあります。メインクラスで戻り値を取得して出力すると、出力される値は「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 表現を得るには、このメソッドをオーバーライドして、クラスに適した実装を提供する必要があります。