アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、Javaの資格勉強をしています。
(1)String str = "abc";
(2)String str = new String("abc");
この二つの作成の違いが理解できません。

(1)一つのStirngオブジェクトが作成されます。
(2)二つのStringオブジェクトが作成されます。
と記載してあります。単純にnew を使用すると二つ作成されると考えていいのでしょうか

A 回答 (2件)

javaでは文字列は全てStringクラスのインスタンスとなります。


たとえば、文字列"abc"の長さを取得する場合
 int length = "abc".length();
と記述できるのはそのためです。

> (1)一つのStirngオブジェクトが作成されます。

以下のプログラムを実行すると"true"と表示されます。

 String s1 = "abc";
 String s2 = "abc";
 System.out.println((s1 == s2));// 同じオブジェクトなのでtrue

つまり、"abc"という内容のStringクラスのインスタンスがシステム上に
1つだけ存在し、s1とs2は同じオブジェクトを参照していることになります。

一方、s2をnew String("abc")とした場合、"abc"という文字列を持つ
新しいStringオブジェクトを明示的に生成することになるので
以下のプログラムを実行すると"false"と表示されます。

 String s1 = "abc";
 String s2 = new String("abc");
 System.out.println((s1 == s2)); // 違うオブジェクトなのでfalse

> (2)二つのStringオブジェクトが作成されます。

String s2 = new String("abc"); はシステム上にある"abc"という内容の
Stringクラスのインスタンスからs2を明示的に作成しているので
2つのオブジェクトを作成したことになります。
    • good
    • 0
この回答へのお礼

親切にありがとうございます。
String s1 = "abc";
String s2 = "abc";
の時にs1==s2でtrueになるとは!
とても勉強になりました。
ありがとうございました。

お礼日時:2004/01/18 17:45

誤解を招く解説文が悪いですね(^_^;)



(1)「だけ」の場合にはオブジェクトがひとつ

(1)(2)の二行で2つのオブジェクトが作成されます。

ということですね。

確かにこの文章だと、
String str = new String("abc");
の一行で”2つのオブジェクトが作られる”のかな?
とおもえますね。
    • good
    • 0
この回答へのお礼

ありがとうござます。
二行で二つのオブジェクトが作られるということですね!Stringオブジェクトのガッベージコレクションの動きで悩んでいました。

お礼日時:2004/02/03 18:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!