- PR -

String型のnew生成について

1
投稿者投稿内容
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2007-05-09 23:42
いつもお世話になっております。
String型のnew生成について質問です。

下記(1)のように生成と同時に値を入れた場合は暗黙的にnew生成されると思っているのですが、
(2)のようなコーディングをした場合、どのタイミングでnew生成されているのでしょうか?

(1)
  String hoge = "hello";     // hogeがnew生成され、中に"hello"がセットされる

(2)
  String hoge1 = "hello!!";   // hoge1がnew生成される
  String hoge2 = hoge1;     // hoge2もnew生成される?
  hoge1 = "good bye!!";   // hoge1が再度new生成される?
  hoge2 = hoge1;       // hoge2が再度new生成される?

うまく文章で説明できなくて申しわけありませんが、
どなたかご存知の方がいましたら教えてください。
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2007-05-09 23:50
引用:

みゅうさんの書き込み (2007-05-09 23:42) より:

(2)


  String hoge2 = hoge1;     // hoge2もnew生成される?


されません。
引用:

  hoge1 = "good bye!!";   // hoge1が再度new生成される?


されます。
引用:

  hoge2 = hoge1;       // hoge2が再度new生成される?


されません。

参照型変数、参照渡し、あたりで検索をかけると幸せになれると思います。

<追記>
まいったなあ・・・。今さらどうにもならなさそうだし。orz
これで勘弁してください。m(_ _;m
http://www.javaroad.jp/java_character2.htm

[ メッセージ編集済み 編集者: さいくろう 編集日時 2007-05-10 00:17 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-05-09 23:50
newとやっていないので、新たにインスタンスが作られているわけではありません。
単なるString型のインスタンスの代入です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-05-10 00:48
引用:

みゅうさんの書き込み (2007-05-09 23:42) より:

String hoge = "hello";     // hogeがnew生成され、中に"hello"がセットされる


いいえ。

引用:

String hoge1 = "hello!!";   // hoge1がnew生成される


いいえ。

引用:

String hoge2 = hoge1;     // hoge2もnew生成される?
hoge1 = "good bye!!";   // hoge1が再度new生成される?
hoge2 = hoge1;       // hoge2が再度new生成される?


いいえ。

作成されるように書いたとしても、それは右辺の時点のお話でしょう。
hoge や hoge1 が new されるわけではありません。

# 書き方難しい。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2007-05-10 01:17
引用:

(1)
  String hoge = "hello"; // hogeがnew生成され、中に"hello"がセットされる



「"hello"という内容をもったStringオブジェクトをnewして、それへの参照をhogeに代入する」
ですね。
newされるのはオブジェクトであり、変数はオブジェクトへの参照を保持するだけです。

質問の意図が、「文字列リテラルからStringオブジェクトが生成されるのは、どの時点か?」
ということであれば、回答はかなり複雑です。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31524&forum=12
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2007-05-12 19:05
みなさま、ご回答ありがとうございます。

"hello!!"というオブジェクトがnew生成されるだけで、
hoge1は単にそのオブジェクトを参照しているだけなんですね。

javaの勉強を始めたばかりの頃に知識としては知っていたはずのですが、
実際にコーディングばっかりやっている間に捉え方がズレていたようです。
やっぱりjavaは難しいです…。

復習も兼ねて一度勉強しなおします。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)