• ベストアンサー

stringオブジェクト

あるテキストの問題に 「STRINGオブジェクトはいくつ作成されますか? String a,b,c; a="1234"; b=a; c=a+b; 」 というのがあったんですが、答えは2個でaとb。 cはストリング文字列だから、という答えでした・・・ えーーー?!? とびっくりしてしまいました。 なぜなら、"1234"というのも文字列だと認識していたからです。 StringオブジェクトとString文字列の境目は何ですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

変なテキストですね。 そもそも、「String」は「文字列」の意味なのだから、 「ストリング文字列」というのは「文字列文字列」となって、意味が通りません。 私は聞いたことがありません。 書店で売っているものならば、書名を教えてください。 そして、答ですが、 「2個」というのは当たっていますが、aとbではありません。 "1234"という文字列=aが指している文字列=bが指している文字列 と、 "12341234"という文字列=cが指している文字列 の2つです。 なお、「"1234"というのも文字列」という認識は当たっています。 String型など、参照型の代入の場合には、オブジェクトは生成されず、 単に参照場所をコピーしているだけです。 よってb=a;のところではオブジェクトは作成されません。 c=a+b;のところは、+演算子の特殊な使い方をしていて、 文字列をくっつけた新しい文字列を生成するという役割です。 "1234"と"1234"をくっつけて"12341234"という文字列を作っています。

azicyan
質問者

補足

ありがとうございます。 SUN認定試験の対策本の翔泳社から出ている 「Java2_310-035」の51ページです。 >「ストリング文字列」というのは「文字列文字列」となって、意味が通りません。 そうなんですよね。ぼくも「????」となってしまいました。 全部書き写しますね 「次のコードではstringオブジェクトがいくつ作成されますか? String A,B,C; A = "1234"; B = A; C = A+B; 回答1,2,3,4 正解は2です。変数AとBは、どちらも同じStringオブジェクトをさしますが、変数Cは、Aのコピーが2つ連結されて作成されたString文字列をさします。したがって、作成されるのは2つのStringオブジェクトだけなので、選択肢2、以外の選択肢は不正解です」 とあります。 あなたの回答のほうが、よほどすっきりと意味がわかりました! 代入されるだけではオブジェクトは作成されない、と習ったばかりなので、よくわかりました。 翔泳社にもメールを打って見ます。

その他の回答 (1)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

>正解は2です。変数AとBは、どちらも同じStringオブジェクトをさしますが、変数Cは、Aのコピーが2つ連結されて作成されたString文字列をさします。したがって、作成されるのは2つのStringオブジェクトだけなので、選択肢2、以外の選択肢は不正解です」 あーなるほど…。 これはたぶん、著者(または訳者)は、「Stringオブジェクト」と 「String文字列」を区別して書いてないと思います。 どちらも「String型のオブジェクト」の意味で書いているのだと思いますが、 それが誤解を招いたのでしょう。 あるいは単なる書きそこねかもしれません。 答はやはり「A = B = "1234"」と「C = "12341234"」の2つになります。 たしかに、この書き方ではわかりにくい場合があるので、 「Stringオブジェクト」に統一した方がいいですね。

azicyan
質問者

補足

はぁ~ なるほど・・・ そういわれてみれば・・・ ありがとうございました

関連するQ&A