web-dev-qa-db-ja.com

toString()メソッドをいつ使用するか

これは非常に基本的に聞こえるかもしれません...誰かがtoString()メソッドの使用法と、これを効果的に使用するタイミングについて説明できますか?

グーグルで検索しましたが、良いリソースが見つかりませんでした。

12
user246635

ほとんどの言語では、toStringまたは同等のメソッドは、オブジェクトをテキストで表現できることを保証するだけです。

これは、ロギング、デバッグ、または遭遇するすべてのオブジェクトを文字列としてレンダリングできる必要があるその他の状況で特に役立ちます。

多くの場合、オブジェクトはカスタムtoString動作を実装しているため、メソッドは実際にオブジェクトインスタンスについて何かを教えてくれます。たとえば、Personクラスはそれをオーバーライドして「姓、名」を返す場合がありますが、Dateクラスはデフォルト設定(現在のユーザーインターフェイスカルチャなど)に従ってフォーマットされた日付を表示します)。

24
Jeff Sternal

クラスのtoStringメソッドをオーバーライドしたい状況はいくつかありますが(そのほとんどは既存の回答ですでに言及されています)、オブジェクトでtoStringを明示的に呼び出す必要がある最も一般的な状況の1つは次のとおりです。 StringBuilderを使用して文字列を作成する場合。

public String createString(final String str) {
  final StringBuilder sb = new StringBuilder(str);
  sb.append("foo");
  sb.append("bar");
  return sb.toString();
}
3
ponzao
  1. オブジェクトを表示したいが、それが以前にnullであるかどうかを確認したくない。
  2. 文字列を連結し、特別な属性については考えずに、プログラマーにデフォルトの属性を提供するだけです。

したがって:

out.println("You are " + user);

ユーザーがnullの場合、またはtoStringがこの(存在する)インスタンスに対して「James」を表示する場合、「Youarenull」または「YouareJames」を表示します。

2
Llistes Sugra

.NETまたはJavaを想定:

一般に、クラスのテキスト表現が必要な場合は、ToString()をオーバーロードする必要があります(クラスにとって意味があると仮定します)。

1
Oded

クラスでtoString()をオーバーライドして、オブジェクトの意味のあるテキスト表現を提供することができます。

たとえば、PersonクラスのtoString()をオーバーライドして、姓名を返すことができます。

1
Dan

参照変数を出力すると、次のタスクが発生します。

  • 参照変数にnullが含まれている場合、null値が表示されます。
  • 参照変数にオブジェクトのアドレスが含まれている場合、toString()メソッドはJVMによって自動的に呼び出されます。

デフォルトでは、_Object.class_のtoString()は次のように出力します。

ClassName @ HexadecimalOfHashCode

クラスでこのメソッドをオーバーライドして、意味のある文字列を表示できます。通常、toString()メソッドは、オブジェクトのコンテンツを出力するために使用されます。このメソッドは、StringStringBufferintegerなど。

0
rajukumarsah

toString()を使用して16進アドレスを回避できるため、この問題を解決するには、toString()をオーバーライドする必要があります。そうすると、データの元のテキスト形式が取得されます。

0

データ型を文字列に変更する必要がある場合は、Tostringを使用する必要があります。 intなどの組み込み型の場合、文字列表現が期待されます。すなわち

  int i = 5;
  string s = i.ToString(); //s now equals "5" 

ほとんどの複雑な型と、tostringメソッドをオーバーロードする必要があるすべてのユーザー作成型の文字列「5」を提供します。そうしないと、クラスの名前のみが取得されます。文字列にするには、独自のオブジェクトを使用して.netに組み込まれた複雑なフォーマットを使用できます。 datetimeクラスのように複雑なフォーマッターを提供して、独自の型を柔軟に使用できます。

0
rerun

これは、コンストラクターを介して初期化するフィールド値と、ゲッターを使用せずに表示するものを表示する必要がある場合に使用されます。

    import Test.Date;
public class Employ {

private String firstname;
private String lastname;
private Date DOB;
private Date DOH;
public Employ(String name,String lastname,Date DOB,Date DOH)
{
    this.firstname=name;
    this.lastname=lastname;
    this.DOB=DOB;
    this.DOH=DOH;

}

    public  String toString(){

    return String.format("%s %s Birthday %s Hired %s",firstname,lastname,DOB,DOH);      
        }
public static void main (String args[])
{
    Date dob= new Date(12,3,1992);
    Date doh= new Date(10,6,2005);

    Employ em= new Employ("BOB", "Wrigh", dob,doh);

    System.out.println(em);

}

}

0
Zul Qarnain