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

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

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

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

Q&A

解決済

3回答

10325閲覧

StringBuilderクラスにおいてのtoStringメソッドの意味

n0rio

総合スコア13

Java

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

0グッド

0クリップ

投稿2018/03/29 08:12

市販のテキストを読んでいてこのようなコードを見つけたのですが、toStringメソッドString型変数strに代入する意味がよくわかりません。

java

1StringBuilder sb = new StringBuilder(); 2 3for (int i = 0; i < 3; i++) { 4 sb.append("Java"); 5} 6 7String str = sb.toString(); // <= ???

仮にこのString str = sb.toString();を削除してSystem.out.println(sb);と記述しても結果的にはJavaJavaJavaと表示されると思うのですが。
ちなみにテキストでは「連結した文字列を取り出す」との説明です。

例えば下記のように...

java

1 StringBuilder sb = new StringBuilder(); 2 3 for (int i = 0; i < 3; i++) { 4 sb.append("Java"); 5 } 6 7 String str1 = sb.toString(); 8 System.out.println(str1); // => JavaJavaJava 9 10 sb.append("+hogehogehoge"); 11 String str2 = sb.toString(); 12 System.out.println(str2); // => JavaJavaJava+hogehogehoge

...ベースとなる変数sbの中身を維持した上で使い回す場合などを想定しtoStringメソッドを使うという考え方なのでしょうか?。

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

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

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

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

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

guest

回答3

0

println は引数が文字列でなかったときに toString を呼び出します。

投稿2018/03/29 08:14

Zuishin

総合スコア28660

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

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

n0rio

2018/03/30 00:09

回答いただきありがとうございました。
guest

0

目的が「連結結果をコンソールへ表示する」ことだけならtoStringの必要はありません。

System.out.println(sb);

とすれば、printlnメソッドが引数に指定された任意のオブジェクトに対してString.valueOf -> sb.toStringを呼び出すうごきになるからです。

一方目的が「Stringとして結果を得る」ならtoStringを明示的に呼び出すべきです。

String result = sb.toString();

ならOKですが、

String result = sb;

は型が違うのでコンパイルエラーになりますよね?

投稿2018/03/29 08:16

KSwordOfHaste

総合スコア18394

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

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

n0rio

2018/03/30 00:09

回答いただきありがとうございました。
guest

0

ベストアンサー

参照型のnullでないインスタンスを出力する際は、内部的にtoStringが呼ばれます。
ですので、出力前にわざわざStringに直すのは処理的には無意味かと。

...その方が分かりやすいと思ったんじゃないですかね?著者が。


いちおう引用しておきます。

PrintStream#println(Object)

Objectを出力して、行を終了します。このメソッドは最初にString.valueOf(x)を呼び出して出力されるオブジェクトの文字列値を取得してから、print(String)、そしてprintln()を呼び出すのと同じように動作します。

String#valueOf(Object)

引数がnullの場合は"null"に等しい文字列。それ以外の場合はobj.toString()の値が返される。

投稿2018/03/29 08:16

編集2018/03/29 08:19
LouiS0616

総合スコア35660

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

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

n0rio

2018/03/30 00:09

著者の意図がわからないと言うことでスルーして深く考えないことにしました。
fuzzball

2018/03/30 00:42 編集

著者の意図は「連結した文字列を取り出す」なんでしょ?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問