オブジェクト変数だけをsysoutすると
大学のTAやってて気づいたこと。
JavaでSystem.out.println(オブジェクト変数.toString)をSystem.out.println(オブジェクト変数)で出力すると、前者のメソッド呼び出しと同じ動作になるようです。
試しにこんなコードを作って、
class Hoge { String name; int age; public Hoge(String name, int age) { this.name = name; this.age = age; } public String toString() { return String.format("%s name:%s age:%d", super.toString(), name, age); } public static void main(String args[]) { Hoge foo = new Hoge("foo", 22); System.out.println("With toString -> " + foo.toString()); System.out.println("Without toString -> " + foo); // このままこのクラスのtoStringを呼び出すらしい } }
実行してみたところ、
% java Hoge With toString -> Hoge@593d93f4 name:foo age:22 Without toString -> Hoge@593d93f4 name:foo age:22
toStringがあってもなくても、このメソッドが呼び出されることがわかった。
ちなみに、toStringを定義しない場合、ObjectクラスのtoString(super.toString)が呼び出されるらしい。
追記
オブジェクトの内容を表示するのに便利なtoStringメソッドですが、今のプログラムだと、クラスのメンバ変数が増えたりしたら減ったりしたらtoStringメソッドにもその変数を追加削除しなければならない。そんなのはめんどくさいので、リフレクションを使ったら便利だと思う。そうすることで、いちいちtoStringに変数の追加削除をしなくても済むから。