- 締切済み
素朴な疑問(=について)
Javaの勉強を始めた初心者ですが、 よろしくお願いします。 String strAAA; strAAA = "AAA"; この場合、Stringクラスからインスタンス化した変数strAAAに 代入演算子(=)で、"AAA"を代入してますよね。 自作のクラスでも同じ事が可能なのでしょうか? 例えば、clsMyClassを定義して、 clsMyClass objMyClass; objMyClass = 50; ※コンパイルエラーになる。 多分、 strAAA = "AAA"; は、 strAAA = String("AAA"); が実行されているんだと思うんですが、 Integerクラスのインスタンスでも代入演算子で可能ですよね。 =の右辺には、なんの記述も無いのに、特殊なクラスのみ可能なのでしょうか? 自作のクラスでも可能なのでしょうか? 複数のコンストラクタを作成してテストしましたが、 成功出来ませんでした。 つたない文章ですが、お知恵を頂けたら幸いです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- askaaska
- ベストアンサー率35% (1455/4149)
String strAAA = "AAA"; は String strAAA = new String("AAA"); Integer intAAA = 3; は Integer intAAA = new Integer(3); よ。 そして、これは一部の特殊なクラスにのみ可能な省略型なのよ。 そもそも、Javaでは最初のStringだけがこの様に記述できたわ。 Integerは省略できなかったのよ。 でもJava5になってプリミティブ型(intとかbooleanとか)と そのラッパークラス(IntegerとかBooleanとか)の間には Autoboxingといって、自動で型変換してくれる機能がついたのよ。 これによって実装者は今まで Integer intAAA = new Integer(3); と書いていたのが Integer intAAA = 3; こう書ける様になったの。
- Tacosan
- ベストアンサー率23% (3656/15482)
値型と (対応する) 参照型との間では, 変換 (ボクシング/アンボクシング) がコンパイラにより自動的に行われます. つまり Integer x = 50; は Integer x = new Integer(50); と同じような意味になります (実際には別のメソッドを使うことが多いですが). この自動変換が特別扱いされているだけだと思います. ちなみに "AAA" はそれ自身がクラスString のオブジェクトなので strAAA = "AAA"; は全く問題ありません. なお, 書くなら strAAA = new String("AAA"); ですが, これは上とは微妙に意味が異なります.
お礼
ありがとうございます。 やっぱり自作のクラスでは出来ないのですね。
お礼
ありがとうございます。 やっぱり自作のクラスでは出来ないのですね。