バナー画像

toStringメソッドとは

Javaでは、すべてのクラスに、toString()メソッドが用意されています。

toStringメソッドは、数値型などを文字列に変換するときなどに使用します。それ以外にも、オブジェクトの中身を文字列表現として取得でき、デバッグで確認するときなども活用します。

この記事では、toStringメソッドの使い方や、toStringメソッドをオーバライドして、独自の処理を組み込む方法などを紹介します。

数値を文字列に変換する

toStringメソッドで数値を文字列に変換する方法を解説します。

単純にintやlongなどの数値を文字列に変換する場合は、Integer.toString()もしくはLong.toString()メソッドを使用して、数値を文字列に変換できます。

int intValue = 1000;
String s = Integer.toString(intValue);

書式を指定して数値を文字列に変換する

toStringメソッドは、カンマ区切りや、パーセント表記などの書式指定ができません。書式を指定する場合は、NumberFormatクラスを使用します。

import java.text.NumberFormat;

public class Main {
    public static void main(String[] args) {

        //カンマ区切のNumberFormatインスタンスを生成
        NumberFormat nf1 = NumberFormat.getNumberInstance();
        //パーセント表記のNumberFormatインスタンスを生成
        NumberFormat nf2 = NumberFormat.getPercentInstance();

        //NumberFormatクラスを使用して、数値をフォーマットする
        System.out.println(nf1.format(10000.999));
        System.out.println(nf2.format(0.90));
    }
}

▪️ 実行結果

10,000.999
90%

文字列を数値に変換する

上の例とは逆に、文字列を数値に変換するには、各数値型のvalueOfメソッドを使用します。

次のサンプルコードでは、文字列をInteger型に変換しています。

int i = Integer.valueOf("1099");
System.out.println(i);

便利なtoStringメソッドの使い方

数値から文字列への変換以外にも、toStringメソッドを使用して、クラスのインスタンスを、文字列表現で取得できます。

Eclipse(統合開発環境)などのデバッグ環境が使えない場合に有用な方法です。

Mapの中身を確認する

MapのtoStringメソッドを使って、Mapに格納されている要素の文字列情報を取得することができます。

import java.util.HashMap;
import java.util.Map;

public class SampleClass {
    public static void main(String[] args) {

        Map<String, String> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        System.out.println(map.toString());
    }
}

▪️ 実行結果

{key1=value1, key2=value2}

System.out.printlnは、文字列以外のオブジェクトを渡すと、暗黙的にtoStringメソッドが呼び出されるため、以下のように書くこともできます。

System.out.println(map);

Listの中身を確認する

Mapクラスと同様に、ListもtoStringメソッドで、要素の文字列情報を取得できます。

import java.util.ArrayList;
import java.util.List;

public class SampleClass {
    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();
        list.add("value1");
        list.add("value2");
        System.out.println(list.toString());
    }
}

▪️ 実行結果

[value1, value2]

自作クラスでtoStringメソッドを使う

独自に作成した自作クラスでtoStringメソッドを実装する方法を解説します。

まず、次のサンプルコードのような、名前(name)と年齢(age)のプロパティを持つ独自クラスを作成しましょう。

public class User {
   private String nama;
   private int age;

   public String getNama() {
       return nama;
   }
   public void setNama(String nama) {
       this.nama = nama;
   }
   public int getAge() {
       return age;
   }
   public void setAge(int age) {
       this.age = age;
   }
}

上記で作成した独自クラスのインスタンスを作成して、toStringメソッドを呼び出してみましょう。

User user = new User();
user.setNama("Yamada Tarou");
user.setAge(30);
System.out.println(user.toString());

▪️ 実行結果

User@2a139a55

実行結果を見てもわかる通り、toStringメソッドを呼び出すと、謎の文字列が表示されるだけで、クラスのプロパティに何が入っているのか確認できません。

ポテパンダの一言メモ

上の実行結果で「User@2a139a55」と表示された謎の数字は、インスタンスのアドレスを示す数値です。アドレスはnewする度に、毎回新しく発番され、各インスタンスのメモリ上の位置を管理しています。

独自クラスでtoStringメソッドが呼びされたとき、プロパティの設定内容など、クラスのインスタンス表現を文字列で返したい場合は、toStringメソッドをオーバーライドします。

次のサンプルコードは、上で作成して独自クラスにtoStringメソッドをオーバーライドした例です。

プロパティの内容を文字列連結して返しています。

@Override
public String toString() {
    return "[" + this.getNama() + ":" + this.getAge() + "]";
}

では早速、toStringメソッドをオーバーライドしたクラスで、もう一度、toStringメソッドを呼んでみましょう。

User user = new User();
user.setNama("Yamada Tarou");
user.setAge(30);
System.out.println(user.toString());

▪️ 実行結果

[Yamada Tarou:30]

先程オーバーライドしたtoStringメソッドが呼び出され、プロパティの設定内容がコンソールに出力されていると思います。

このように、自作クラスにtoStringメソッドをオーバーライドしておくと、デバッグできない環境であっても、容易にオブジェクトの内容が確認でます。

「@Override」は必須ではないけど付けよう

前述したサンプルコードの、toStringメソッドに「@Override」アノテーションが付いているのに気付いた人もいると思います。

「@Override」は、メソッドがオーバーライドされている事を示すアノテーションですが、実は必須ではなく、付けなくても問題なくオーバーライドされます。

ただし、「@Override」アノテーションは、一般的には付けた方が良いと言われています。

その理由は、「@Override」を付けると、オーバーライドするメソッド名や、引数の数や型が一致しない時、コンパイルの時点でエラーになってくれる為です。

@Override
public String toStr() {
// toStringをオーバーライドするつもりが、toStrにしてしまった場合
}

■ コンパイル結果

toStr() はスーパータイプ・メソッドをオーバーライドまたは実装する必要があります

「@Override」が無いと、オーバーライドするメソッドの綴りを間違えもコンパイルエラーは発生しない為、気付かずリリースしてしまうと、実行時に意図しない動きになる恐れがあります。

toStringを活用しよう

JavaのtoStringメソッドで数値を文字列に変換する方法や、オーバーライドの話にも触れて、toStringメソッドを解説してきました。

クラスの継承や、メソッドのオーバーライドについてもっと知りたい方は、以下の記事も参考にしてみてください。

【関連記事】
【初心者歓迎】クラスの継承とは?Javaのextendsの使い方を理解しよう!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。