
StringBuilder sbJSON = new StringBuilder();
StringBuilderクラスについて教えて頂きたいのですが
StringBuilderクラスは可変長の文字列を扱うクラスだと思うのですが
この可変長の文字列と通常の文字列の違いについて調べてみたところ
可変長文字列:とりあえず、自由に文字列を入れられる。
固定長文字列:決めた上限文字数までしか入れられない。
とあったのですが
StringBuilderクラスは
Stringクラスの拡張版みたいなものと捉えて良いのでしょうか?
No.1ベストアンサー
- 回答日時:
> StringBuilderクラスは可変長の文字列を扱うクラスだと思う
確かに StringBuilder は可変長の文字列を扱いますがそれは String も同じです。StringBuilder と String の違いは別のところにあります。
https://docs.oracle.com/javase/jp/8/docs/api/jav …
多分 Java ライブラリリファレンスの上記 URL 内の「文字の可変シーケンスです」という文から StringBuilder の特徴が可変長なことだと思われたのかもしれませんが、ここでいう「可変」は保持している内容を編集できるという意味です。
上記 URL のメソッド一覧を見れば delete・insert・replace といった内容編集に関するメソッドがあることに気付くと思われます。一方、String クラスでは変更を行っていそうなメソッドもその説明をよく読むと「……を返します」と書かれていて、そのクラスの保持している内容についてはクラスの説明の冒頭に「この値を作成したあとに変更はできません」と明記しています。
……え、でも String も以下のコードで内容を書き換えられるじゃないかって?
String s = "abc";
s += "def";
// ↑これで s の「内容」が "abc" から "abcdef" に書き換わった……?
残念ながらそれは違います。上記の代入演算子は以下の略記だという事を思い出してください。
s = s + "def";
このとき、まず s の内容と "def" を連結させたらどうなるかという結果を内容として持つ新たな String インスタンスが生成され、次にその新しいインスタンスへの参照を s に代入するという事が行われています。
つまり、参照型の参照先を見る方法があったならば、s の参照先は代入前と代入後とでは違ってきます。
一方、StringBuilder の append では参照先が変わることなく保持している内容が書き換わります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
デバックログの出し方
-
ゲッターを使わないで変数にア...
-
「継承されたメソッドの可視性...
-
C# 「データが失なわれる可能性...
-
VB DLLプロジェクトについて
-
Javaでmainからインスタンス化...
-
抽象クラスをJUNITでテストする...
-
interface,extend,implementの...
-
Commons-Discovery.jarとは?
-
ラベルに日付を表示
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
レコード件数の表示
-
オブジェクト参照がオブジェク...
-
変数名の付け方
-
複数のクラスで共通した関数を...
-
c++,ある関数のクラスから別の...
-
JSPで<SELECT>の中にDBから持っ...
-
EXCEL VBAにて動的にCheckBOXを...
-
Fileの読み取り専用の解除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(vba)他のアプリケーションの右...
-
interface,extend,implementの...
-
VB DLLプロジェクトについて
-
「継承されたメソッドの可視性...
-
C# 「データが失なわれる可能性...
-
【C#】クラスのコンストラクタ...
-
C#でインターフェースのプロパ...
-
「ラッパークラス」の存在意義...
-
メソッドの引数にクラス名を渡す
-
VBがオブジェクト指向言語でな...
-
オーバーライドとラッパーの違い
-
デバッグ時に「Source not found」
-
スクロールバーについて
-
携帯IApplicationのsuper
-
ファイルパスが取得出来ない(P...
-
EventListenerの実装について
-
c# この高速化の方法あり? 2
-
抽象クラスが継承されているか...
-
ASP.NETでの共通コードの書き方...
-
抽象クラスをJUNITでテストする...
おすすめ情報