Java クラスにtoStringメソッドを追加する意味

JavaのクラスにtoStringメソッドを追加する意味とそのコードのサンプルです。

確認環境
・eclipse 4.8

目次

サンプル toStringメソッドとは
  確認の手順1:クラスにtoStringメソッドを追加する
  確認の手順2:toStringメソッドを使用する

toStringメソッドとは

public String toString()
  • Objectクラスのメソッドで、オブジェクトの文字列表現を返します。
  • オブジェクトの値を確認できるようになるため、デバッグ等で使用されます。
  • 全てのクラスはObjectクラスを継承しています。そのため、作成したクラスにtoStringメソッドを追加するとオーバーライドになります。
  • 以下は、OracleのJava8のtoStringメソッドのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html#toString--

確認の手順1:クラスにtoStringメソッドを追加する

Eclipseの機能で以下のクラスにtoStringメソッドを追加し、オブジェクトの内部の値を返すようにします。

package test1;

public class Product {
    private String name;
    private int price;
    
	public Product(String name, int price) {
		this.name = name;
		this.price = price;
	}
}

 

手順1.ソースコード上で、右クリックして、「ソース」→「toString()生成」をクリックします。

 

2.「フィールド」のnameとpriceにチェックを入れます。
「挿入ポイント」はProduct(String,int)の後を選びます。完了後「生成」ボタンを押します。

 

3.コード上に、toStringメソッドが自動で生成されました。オーバーライド(@Override)のアノテーションがついています。

package test1;

public class Product {
    private String name;
    private int price;
    
	public Product(String name, int price) {
		this.name = name;
		this.price = price;
	}

	@Override
	public String toString() {
		return "Product [name=" + name + ", price=" + price + "]";
	}
}

確認の手順2:toStringメソッドを使用する

上記で追加したtoStringメソッドを使用してみます。

package test1;

public class Test1 {
    public static void main(String[] args) {
    	
    	Product p1 = new Product("りんご",300);
     
    	System.out.println(p1.toString());
    	//Product [name=りんご, price=300]
    	
    	System.out.println(p1);
    	//Product [name=りんご, price=300]
    }
 }

6行目は、インスタンスを生成しています。コンストラクタで文字列と数値を渡しています。
8行目は、9行目の文字列を表示します。これは上記コードの13行目のtoStringメソッドが実行されるからです。

11行目のprintlnメソッドの引数は、4行目の変数ですが同じように文字列を出力します。
文字列を表示する過程でtoStringメソッドが呼び出されるためです。

printlnメソッドは、最初にString.valueOf(x)を呼び出して文字列の値を取得します。
String.valueOf(x)は、obj.toString()の値を返します。
そのときに、上記のProductクラスでオーバーライドしたtoStringのメソッドが実行されます。

上記コードの13行目のtoStringメソッドがない場合は、8,11行目ともtest1.Product@16b98e56のような文字列が出力されます。

https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println-java.lang.Object-https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#valueOf-java.lang.Object-

関連の記事

Eclipse getterとsetterを自動で作成する方法
Java オーバーライドのサンプル

△上に戻る