【はじめてのJava】toString()【いろいろなクラス編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
目次
Objectクラス
Objectクラスは、Javaクラス構造を構成するルートとなるクラスです。すべてのクラスはObjectクラスの直接または間接的にこのクラスから派生しています。
また、私たちが独自に定義したクラスも暗黙的にObjectクラスを継承しています。
したがって、すべてのクラスがObjectクラスで定義されているメソッド群を継承していることになります。
今シリーズの記事では、このObjectクラスで定義されているメソッドのうち、toString(),equals(),hashCode()について3記事にわたって紹介します。
toString()
toString()メソッドは、
public String toString()
として定義されており、そのオブジェクトに関する情報の文字列を戻り値として返すメソッドです。
Objectクラスで定義されているtoString()メソッドでは、「クラス名@ハッシュ値」という文字列を返すように定義されています。
クラス名の部分にはメソッドを実行したオブジェクトのクラス名が入ります。ハッシュ値の部分には、そのオブジェクトをハッシュ値に変換した値が入ります。
次のようなサンプルコードを実行してみましょう。
public class Sample { public static void main(String[] args) { SampleToString sts = new SampleToString(); System.out.println(sts.toString()); System.out.println(sts); } } class SampleToString{ }
サンプルコードを実行すると、「blog.object.SampleToString@4926097b」という文字列が2回出力されています。「blog.object.SampleToString」の部分がメソッドを実行したオブジェクトstsのクラス名です。blog.object.はSampleToStringクラスが定義されているパッケージを表しています。そして、「4926097b」がオブジェクトstsをハッシュ値に変換した値です。
今回、println()の引数として「sts」と「sts.toString()」を渡していますが、これらの出力結果は同じ文字列となっています。これは、println()の引数にオブジェクトを渡した場合、そのオブジェクトでtoString()メソッドを実行したときの戻り値を出力するように定義されているためです。したがって、println()の引数に「sts」と「sts.toString()」を渡した時の出力は、全く同じ文字列が出力されることになります。
このtoString()メソッドはオーバーライドして使用することが多いです。元々の戻り値である「クラス名@ハッシュ値」の値から私たちが読み取れる情報が少ないため、オーバライドして戻り値を分かりやすい内容に書き換えて使用します。実際、Javaであらかじめ定義されているクラスにもtoString()メソッドをオーバーライドして戻り値を書き換えているものが存在します。
例えば、ArrayListクラスのオブジェクトをprintln()に渡すと、渡したArrayListの要素を全て出力してくれます。これはArrayListクラスでtoString()メソッドがオーバーライドされているためです。
先程のサンプルコードを以下のように書き換えて実行してみます。
public class Sample { public static void main(String[] args) { SampleToString sts = new SampleToString(); System.out.println(sts.toString()); System.out.println(sts); } } class SampleToString{ @Override public String toString() { return "サンプル用に定義したクラスです。"; } }
独自に定義したクラスでtoString()メソッドをオーバーライドしました。toString()メソッドをオーバーライドすると、plintln()にオブジェクトを渡した場合の出力結果も変化しています。
このように独自にクラスを定義する際は、toString()メソッドをオーバーライドすることでprintln()による出力結果を思い通りにすることが出来ます。
ポイント
・toString()メソッドをオーバーライドしてオブジェクトを文字列として表すことが出来る。