底辺過ぎてちょっとビビる

26歳からIT業界にいるエンジニアが、まったく成長できてないことを確認するブログ。備忘録的に使いたいとも考えています。

toStringメソッドの不思議

Javaの勉強をちまちま続けてきて、疑問にぶつかった。疑問というか、なんでそういう風になるのかな?というちょっとしたことなんだけど。

 

 

例えば以下のようなソースで、最終的な出力は、

class Cls{
String name;
int age;

name = "太郎";
age = 33;

public String toString(){
return "名前:" + name + " " + "年齢:" + age;
}

public static void main(String[] args){
Cls cls = new Cls();

System.out.println(cls);
}
}

 

名前:太郎 年齢:33

 

というように、toString()メソッドを明示的に呼んでないのに呼び出されている。ほかのメソッドであれば、「cls.XXXX( )」という風に明示しないとダメなはず。

これは、「@Override」という記述について初めて触れた時に、検索して出てきたコードでtoStringが呼び出されていないのに実行されているのを見て、不思議に思ったのですが。

 

もちろん明示的にtoStringとしても処理は当然通るのだけど、なぜtoStringだけ特別っぽい扱いなのだろうか。というか、toStringだけがこんな特別扱いなのか?

 

以下、引用

toStringメソッドとは

toStringメソッドは、インスタンスの文字列表現を返すメソッドである。その文字列は「クラス名@ハッシュコード」のような形式であり、具体的には「PhoneNumber@163b91」となる(正確にはgetClass().getName() + '@' + Integer.toHexString(hashCode())と等しい値を返す)。toStringメソッドは、java.lang.Objectに実装されているメソッドであり、Javaの実装では全てのクラスがjava.lang.Objectを継承しているため、全てのクラスでtoStringメソッドを呼び出すことが出来る。

 

なるほど・・・toStringはjava.lang.Objectに実装されているのか。また、以下のようにもなっている。

toStringメソッドはこのオブジェクトを「テキストで表現する」文字列を返します。この結果は、人間が読める簡潔で有益な情報であるべきです。すべてのサブクラスで、このメソッドをオーバーライドすることをお勧めします。

 だから参考にしたソースには「@Override」でされていたのか。最初のソースを直すと以下のようになる。

 

class Cls{
String name;
int age;

name = "太郎";
age = 33;

@Override
public String toString(){
return "名前:" + name + " " + "年齢:" + age;
}

public static void main(String[] args){
Cls cls = new Cls();

System.out.println(cls);
}
}

 

この件についてはまだ勉強が必要だな~。

 

 

スッキリわかるJava入門 第2版

スッキリわかるJava入門 第2版

 
Javaエンジニア養成読本[現場で役立つ最新知識、満載!]

Javaエンジニア養成読本[現場で役立つ最新知識、満載!]

 
Eclipse4.5ではじめるJavaプログラミング入門
 
スッキリわかるJava入門 実践編 第2版

スッキリわかるJava入門 実践編 第2版