2017-12-04 6 views
-2

は、私はこのコードを持っている:JavaのStringオブジェクトの参照

public class Strut 
{ 
    public static void main(String[] args) 
    { 
     String s=new String("wooo!"); 
     String t=s; 
     System.out.println(s+","+t); 
     t="blaaaah"; 
     System.out.println(s+","+t); 
    } 
} 

私はJavaオブジェクトを割り当てていないので、それは右のオブジェクトは常に、ヒープ上に割り当てられました場合にはスタック上に設計通りに。 変数sとtは、私が正しく書いたコード内の同じオブジェクトへの参照にすぎませんか? 私はsとtを初めて印刷するときに同じ結果が期待されます。それは問題ありません。 しかし、tを修正して文字列をもう一度印刷すると、 はtとsが同じオブジェクトへの参照であるため、blaaaahになってはいけませんか? ありがとう

+3

ここで、 't'は別のオブジェクトを指します。 –

+0

私は= "blaaaah"と書いたときに、新しいオブジェクトを割り当てて、既存のものを変更するようにインストールしたことを意味していますか? また、なぜ私はdownvotedされている知っているかもしれません? –

+0

それは正しいです。 '='はオブジェクトを変更しません。私はなぜあなたがdownvotedされたのかわかりません。 –

答えて

-1

これは1つのフレーズで答えることができます:文字列は不変です。
はい、引用符を使用するたびに、実際には新しいStringオブジェクトが作成されます。ザッツ代わりにやっての理由です:

String s = "wooo!"; 

そしてそれは同じだろう。

String s=new String("wooo!"); 

をあなただけ行うことができます。
PS.Immutableは、Stringオブジェクトが破棄されるまで、各Stringオブジェクトが同じ値を持つことを意味します。文字列表現が値を変更した場合、別のオブジェクトをrefferenしていることがわかります。

+0

ありがとう、あなたは、Javaオブジェクトで常にヒープに割り当てられ、決してスタックに割り当てられていることを確認できますか? –

+3

これは、文字列の不変性のためではありません。 @OliverCharlesworth右。 –

+0

文字列は不変ですが、他のオブジェクトと同じになります。 (しかし、ストリングは、コードが*変更できないポイントである不変のハンマーです。) –

関連する問題