![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- WordPress(ワードプレス) Wordpressの記事URLを自由に決めたい 3 2022/06/02 12:05
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Excel(エクセル) セルの値 11 2022/06/29 11:00
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- その他(プログラミング・Web制作) プログラミング python pandas 固定長データの出力 2 2022/08/16 11:22
- Excel(エクセル) エクセルの日付から年末尾2桁と月を1月をA~Lに変換したい 3 2022/08/08 10:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ラッパークラス」の存在意義...
-
JavaでのAPIの覚え方ってみさな...
-
(vba)他のアプリケーションの右...
-
デバッグ時に「Source not found」
-
単体テストのテストケースにて...
-
Javaでタスクシステムを作るの...
-
ファイルパスが取得出来ない(P...
-
抽象クラスのエラーが出ます
-
c++でのヘッダーファイルの循環...
-
オブジェクト指向のインターフ...
-
Vector、ArrayList、LinkedList...
-
WPF C# PointToClient
-
タイマーの作り方
-
委譲って何ですか?
-
Javaのインスタンス化の構文の...
-
c# この高速化の方法あり?
-
interface,extend,implementの...
-
「IOException は対応する try ...
-
javaでクッキー認証を必要とす...
-
オブジェクト指向の特徴
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
C# 「データが失なわれる可能性...
-
「ラッパークラス」の存在意義...
-
c++でのヘッダーファイルの循環...
-
(vba)他のアプリケーションの右...
-
JavaでのAPIの覚え方ってみさな...
-
ゲッターを使わないで変数にア...
-
「継承されたメソッドの可視性...
-
「IOException は対応する try ...
-
【C#】クラスのコンストラクタ...
-
VB DLLプロジェクトについて
-
Javaのインスタンス化の構文の...
-
Javaで下線
-
委譲って何ですか?
-
ASP.NETでの共通コードの書き方...
-
オーバーライドとラッパーの違い
-
抽象クラスをJUNITでテストする...
-
JTextFieldの入力制限
-
Commons-Discovery.jarとは?
-
setTextについて
おすすめ情報