teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2016/09/19 15:25

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,2 +1,17 @@
1
1
  ①や②はメソッドを使ってその結果をshitumon型のオブジェクトで返すものというだけであり、**これが直接インスタンスを生成しているとは限りません。**どういうshitumonオブジェクトを返すかはそのメソッド次第です。Calendarのようにnewでインスタンス化しているかもしれませんし、あるいは別途に作成してあったインスタンスを返すだけかもしれません。
2
- 確かなのはこれら①②のメソッドが内部で何かをし、shitumon型のオブジェクトを返す、ただそれだけです。
2
+ 確かなのはこれら①②のメソッドが内部で何かをし、shitumon型のオブジェクトを返す、ただそれだけです。
3
+
4
+ ###`=`とは何か
5
+ そもそも質問者がインスタンスを作る方法としてnewを解釈し、それ以外の各メソッドをインスタンス化と理解しているようですが、それぞれの前についている`=`とは何を意味しているのでしょうか?
6
+ `=`は**右辺の要素を左辺に代入する**という演算子です。右辺の結果、あるいは右辺が参照している何か、それがプリミティブ値ならばその値を、左辺の変数に代入するという意味なのです。ここに、**インスタンスを生成するなどの意味が全くない**ことに注意して下さい。
7
+
8
+ ###メソッドの型と返り値
9
+ メソッドを宣言する際、void(返り値なし)でない限り返り値の型を宣言します。この宣言をすることで、そのメソッドを実行した際にどんな型の値が返ってくるかが呼び出し側からわかります。だからこそ、
10
+ ```java
11
+ shitumon q = shitumon.getInstance(); //・・・①
12
+
13
+ shitumon q = qq.taihen(); //・・・②
14
+ ```
15
+ のような書き方ができるのです。返り値がshitumon型だとわかっているから、shitumon型の変数に代入できるのです。ここでも、**これらのメソッドが新規にインスタンスを生成するということは意味していない**ことに気をつけて下さい。あくまで「shitumon型を返す」だけで、それが「このために新たに生成する」ということは全く言っていません。
16
+
17
+ この返すshitumon型の値(オブジェクト)は完全にメソッドの中身任せです。新規にそのインスタンスを生成して返しているかもしれないし、どこかですでに生成していたインスタンスかもしれない。はたまたnullの可能性だってありえます。それはメソッドの中身を見ない限り決してわかりません。とにかく、**①や②はインスタンス化しているとは限らない**ことを念押ししておきます。