2012-03-11 19 views
0

文字列は値型ではありませんが、値型のように使用します。だから、のようにコンパイルされたstring s;はありますか?"string s;"ですか? "string s = new String(..);"にコンパイルされました。

+1

私はそうは思わない。 – BoltClock

+0

'string s;'を実行すると、何もインスタンス化されません。 –

+0

しかし、値の型ではない場合、 'new'でインスタンス化する必要がありますか? – theateist

答えて

2

string s;を定義すると、現在は何も指していない参照のみが定義されます。文字列は参照型なので、コンパイラはstring s = new String(..);を生成しません。あなたはstring s = null;がコンパイル結果になるのでそれを理解するかもしれません。

intなどの値の型は、大文字と小文字が異なります。たとえば、int i;を定義すると、int i = 0;にコンパイルされます.0はデフォルト値です。

0

私は混乱を理解しました。thisのポストを読んだあと、スタックは初期化後にヒープに割り当てられるsへの参照を保持することを理解しました。

+0

私は誰が投票したのかわかりませんが、ここでの理解は、あなたが質問で表現したものよりはるかに優れています。しかし、それはまだ文字列の謎の一部だけをカバーしています。文字列を特別にするもう一つの重要なことがあります。http://msdn.microsoft.com/en-us/library/system.string.isinterned.aspx –

関連する問題