- ベストアンサー
コンストラクタの動作について
下記のソースについて質問があります。 public class Test{ private String msg; public Test(){ this("Good morning"); } public Test(String msg){ msg = msg; } public String toString(){ /*(2)*/ return ("msg:" + msg); } public static void main(String args[]){ System.out.println(new Test()); /*(1)*/ } } このコードをコンパイルした出力結果は、 msg:null となるのですが、ここの仕組みがわかりません。 (1)でTestクラスのコンストラクタを呼び出し、msgに"Good morning"を設定し、 処理が終わると思うのですが、(2)の処理も行われてしまいます。 (1)では、Testのコンストラクタを設定しているだけに見えてしまうのですが、 (2)まで処理が行われるのは、何故かのかをご教授の程お願い致します。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (9)
- neko_noko
- ベストアンサー率45% (146/319)
回答No.10
- hofchan
- ベストアンサー率62% (17/27)
回答No.9
- hofchan
- ベストアンサー率62% (17/27)
回答No.7
- hogejo
- ベストアンサー率42% (11/26)
回答No.6
- neko_noko
- ベストアンサー率45% (146/319)
回答No.5
- himajin100000
- ベストアンサー率54% (1660/3060)
回答No.4
- i2719
- ベストアンサー率35% (11/31)
回答No.3
- fortranxp
- ベストアンサー率26% (181/684)
回答No.2
- himajin100000
- ベストアンサー率54% (1660/3060)
回答No.1
補足
ご丁寧な説明を頂き、ありがとうございます。 おかげで、自分なりにわかるようになってきました。 で、確認したいことがありますので、下記にその内容を記載します System.out.println(Object obj); ^^^^^^^^^^^(1) (1)の箇所で 1.オブジェクトの生成 2.出力処理 が行なわれます。 その際、 public static String valueOf(Object obj) のメソッドを通ることになりますが、(1)で生成された オブジェクト(Object obj)はnullにはならないですよね?? APIリファレンスに記載されているvalueOfの戻り値の説明で 戻り値:引数が null の場合は、"null" に等しい文字列。 そうでない場合は、obj.toString() の値 があります。 ここでは、Objectクラスのobjというインスタンスを作っているため nullではないため、obj.toString() の値が出力される。 と言う認識であっているでしょうか。 宜しくお願い致します。