StringBuilder sb = "asd";
Javaでは、このステートメントは明らかに間違っています。 EclipseのようなIDEがあることを教えてくれます:なぜStringを使用してStringBuilderオブジェクトを初期化できないのですか?
は、文字列からのStringBuilder
に
を変換することはできませんしかし、String
オブジェクトは=
オペレータによって初期化することができます。
メモリ割り当てに関連するいくつかの理由を知りたいと思います。
StringBuilder sb = "asd";
Javaでは、このステートメントは明らかに間違っています。 EclipseのようなIDEがあることを教えてくれます:なぜStringを使用してStringBuilderオブジェクトを初期化できないのですか?
は、文字列からのStringBuilder
に
を変換することはできませんしかし、String
オブジェクトは=
オペレータによって初期化することができます。
メモリ割り当てに関連するいくつかの理由を知りたいと思います。
StringBuilder
はオブジェクトであり、構築する必要があるためです。文字列がでないため、で、StringBuilder
であるため、エラーが発生しています。
文字列は特殊で、プリミティブとクラスの間になるように設計されています。コンストラクタを呼び出してStringインスタンスを作成する代わりに、文字列リテラルをString変数に直接割り当てることができます。
interesting topic:ジャワの
設計者は、言語のパフォーマンスを向上させるよう、代わりにすべてのオブジェクトを作る、 オブジェクト指向言語ではプリミティブ型を保持するので、 を決めました。プリミティブはコールスタック内に として格納されます。これは記憶スペースが少なく、操作するには安価な です。一方、オブジェクトはプログラム ヒープに格納されます。複雑なメモリ管理とより多くの記憶領域が必要です。
パフォーマンスの理由から、JavaのStringは、 プリミティブとクラスの間にあるように設計されています。
より読み出し:
"xxx"
言語*の仕様によってa String literalとして定義され、は Stringオブジェクトです。だから、書くことができます。
String s = "abc"; //ok we got it
Object o = "abc"; //a String is an Object
CharSequence cs = "abc"; //a String is also a CharSequence
が、文字列JLSからのStringBuilder ...
*引用ではありません。
StringBuilderされる「文字列リテラルは、常にタイプString
のですが」ラッパーではないオブジェクトあなたは、変数の参照に割り当てられている文字列リテラルへの参照を持っているので、
これは
String sb = "asd";
に動作します。すなわち、種類は同じである。
これを行うことはできません。暗黙的にタイプを変換したり、Javaで割り当てられたオブジェクトを変更することはできません。
Object o = "asd";
Stringがオブジェクトであるために動作します。
文字列はクラスだけでなく、""
内のものはJVM文字列であり、Stringオブジェクトはその文字列を参照します。
したがってString str="hello"
が機能します。
しかし、StringBuilderと他の何千ものオブジェクトは、String
ほど特別ではないので、同様に初期化されません。
Javaで文字列uは
String s = "xyz";
または
String s = new String("XYZ");
しかしStringBuildeのような文字列のためのオブジェクトを定義することができ、クラスの特殊なタイプです** rは同じようです**通常のクラスと、それに対してオブジェクトを作成する必要があるときは、新しいキーワード(オブジェクトを作成する)を使用する必要があります。 HTH
'StringBuilder sb = new StringBuilder(" asd ");' – sp00m