2016-12-27 16 views
-2
String s1=new String("Java"); /* 1st object created */ 
String s2="Tech"; /* 2nd Object */ 
s1+=s2; /* I'm confusing here whether new object created or result stored in previous object */ 

/*総どのように多くのオブジェクトを作成*/以下のコードでいくつのオブジェクトを作成しましたか? 4つのオブジェクトが作成さ

+1

のみ2.コンパイル時に発生した場合。 – msagala25

+0

この問題に関しては多くのSOの質問があります。投稿する前に検索しませんでしたか?次の項目を確認してください:http://stackoverflow.com/questions/47605/string-concatenation-concat-vs-operator http://stackoverflow.com/questions/3297867/difference-between-string-object-and-string-literal http://stackoverflow.com/questions/26083383/java-string-object-creation – Azodious

+1

文字列は不変です。彼らは変わらない。あなたはいつも新しいものを手に入れます。 –

答えて

-1
String s1=new String("Java"); /* 2 objects created as 'new' is used - s1 (holds reference to new String) and string literal "Java" */ 
String s2="Tech"; /* 3rd Object - "Tech", s2 just holds reference to it */ 
s1+=s2; /* 4th Object created, which is concatenation of s1 and s2. s1 holds reference to it. 

ので合計。

+0

's1'は参照を保持しているので、別のインスタンスではないと思います。あなたは何を言っているのかについて何らかの情報源を提供できますか? – AxelH

+0

それはまさに私が言及したことです - "s1(新しい文字列への参照を保持する)"。同じオブジェクトへの参照はいくつでも構いませんが、オブジェクトはここでの新しいStringオブジェクトであり、もう1つは文字列リテラル "Java"です。文字列リテラルはJavaの文字列プールに格納され、別の行がある場合はString s3 = new String( "Java")//同じ文字列リテラル "Java"オブジェクトが使用されるため、 。 –

+0

しかし、あなたは 'new'として作成された_2オブジェクトは使用されていると言っていますが、文字列オブジェクトと文字列リテラルの違いからリテラルがオブジェクトだとは思えません。作成されたオブジェクトが '' Java''と '' new String( "java") 'であっても、' s1'はオブジェクトではなくオブジェクトへの参照を保持する変数です); – AxelH

関連する問題