• 締切済み

素朴な疑問(=について)

Javaの勉強を始めた初心者ですが、 よろしくお願いします。 String strAAA; strAAA = "AAA"; この場合、Stringクラスからインスタンス化した変数strAAAに 代入演算子(=)で、"AAA"を代入してますよね。 自作のクラスでも同じ事が可能なのでしょうか? 例えば、clsMyClassを定義して、 clsMyClass objMyClass; objMyClass = 50; ※コンパイルエラーになる。 多分、  strAAA = "AAA"; は、  strAAA = String("AAA"); が実行されているんだと思うんですが、 Integerクラスのインスタンスでも代入演算子で可能ですよね。 =の右辺には、なんの記述も無いのに、特殊なクラスのみ可能なのでしょうか? 自作のクラスでも可能なのでしょうか? 複数のコンストラクタを作成してテストしましたが、 成功出来ませんでした。 つたない文章ですが、お知恵を頂けたら幸いです。

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

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; こう書ける様になったの。

JavaStart
質問者

お礼

ありがとうございます。 やっぱり自作のクラスでは出来ないのですね。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

値型と (対応する) 参照型との間では, 変換 (ボクシング/アンボクシング) がコンパイラにより自動的に行われます. つまり Integer x = 50; は Integer x = new Integer(50); と同じような意味になります (実際には別のメソッドを使うことが多いですが). この自動変換が特別扱いされているだけだと思います. ちなみに "AAA" はそれ自身がクラスString のオブジェクトなので strAAA = "AAA"; は全く問題ありません. なお, 書くなら strAAA = new String("AAA"); ですが, これは上とは微妙に意味が異なります.

JavaStart
質問者

お礼

ありがとうございます。 やっぱり自作のクラスでは出来ないのですね。

関連するQ&A

専門家に質問してみよう