質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

3172閲覧

Java StringBuilder が分かりません

k_mail

総合スコア90

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

2クリップ

投稿2016/02/06 14:31

Java SE7 Silver の資格を目指し勉強中です。
分からない点は
・StirngBuilderを使う意味(意義)と使い方
・4行目に出てくるcapacity()はメソッドかコンストラクタか
引数に渡されたものがコンストラクタかメソッドかを見分ける方法を教えてください
また、コンストラクタ/メソッド?が事前に定義がないのになぜ使うことができるのか

要領を得ない質問で申し訳ありませんがよろしくお願いします。

1 public class Main{
2 public static void main(String[] args){
3 StringBuilder sb = new StringBuilder("abcde");
4 System.out.println(sb.capacity());
5 ]
6 }

回答は「21が表示される」です。

kanouao👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

・StirngBuilderを使う意味(意義)と使い方

Stringの連結だけなら+演算子でも可能です。しかし、+演算子の結果が返るたびに新たなStringを生成してしまい、場合によっては無駄の多いプログラムになります。例えば、

java

1String s = "a" + "b" + "c" + "d" + "e";

と書くと、

  1. "a" + "b"で"ab"というStringを生成
  2. "ab" + "c"で"abc"というStringを生成

…以下同様
となり、リテラル以外で新たなStringが計4回生成されます。一方、

java

1String s = new StringBuilder("a").append("b").append("c").append("d").append("e") 2 .toString()

この結果は"abcde"となりますが、Stringオブジェクトの生成を行っているのは最後のtoString()だけで、他は「文字の書き足し」を行っているだけです。Stringの生成には意外にリソースを消費するので、これを使うことによってそれを節約できるのです。

・4行目に出てくるcapacity()はメソッドかコンストラクタか

メソッドです。このStringBuilderの容量を返します。
前述したとおり、appendメソッドは渡された情報(Stringに限らず、あらゆる型に対応し、その情報を文字列化したものを使う)を文字として書き足します。その機能のためにStringBuilderは文字列情報を「変更可能な文字の配列」として持っており、ある程度の空きスペースを持っています。このメソッドはその文字の入れ物としている配列の長さを返します。

引数に渡されたものがコンストラクタかメソッドかを見分ける方法を教えてください

コンストラクタであればnew クラス名(引数)という書き方になります。

また、コンストラクタ/メソッド?が事前に定義がないのになぜ使うことができるのか

Javaの標準ライブラリに入っており、Javaをインストールすれば誰でも使用可能だからです。

投稿2016/02/06 14:44

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k_mail

2016/02/06 15:14

ご返信ありがとうございます。 非常に丁寧な解説で、わかりやすかったです。 漠然としていたことがスッキリしました。 おこがましいのですが、フォローさせていただきました。 よろしくお願いします。
guest

0

参考情報

  • StringBufferとStringBuilderの違い

https://qiita.com/mtanabe/items/ecdf9a751b005a939cd2

...
StringBufferとの違いは「スレッドセーフではない(同期化しない)」こと。

同期化しないので、処理が早い。

...

  • +演算子、StringBuilder、StringBufferの違い(実際に測ってみた。)

http://www.code-magagine.com/?p=2022

...
一般的には、実行速度は下記と言われています。

StringBuilder > StringBuffer >>>>> +演算子
実際どうなのか?

...

  • JDKのバージョンによる文字列連結処理の速度の違い

https://hhelibex.hatenablog.jp/entry/2017/10/24/230254

  • 文字列を10万回連結してみた【String vs StringBuilder】

http://blog.shogonir.jp/entry/2018/02/04/141523

...
1000回ぐらいだと String の方が速いんじゃないの?
...
相変わらず StringBuilder の方がはやいが、Java8ではほぼ差はない
String の連結はJava9よりJava8の方がはやい
...

  • String vs StringBuffer vs StringBuilder

https://www.journaldev.com/538/string-vs-stringbuffer-vs-stringbuilder

  • あえて言うほどではない 文字列結合 Java 9 でもやってみた編

http://www.techscore.com/blog/2017/12/09/benchmark/

...
Java 8 までの常識は「文字列連結はStringBuilder (またはStringBuffer)クラスとそのappendメソッドを使って実装されています」でした。
...
Java 9 ではプラス演算子の内部処理は StringBuilder (またはStringBuffer) ではない
...

投稿2018/08/07 15:42

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問