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

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

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

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

Q&A

解決済

1回答

11922閲覧

【java】 toStringメソッドが分かりません

k_mail

総合スコア90

Java

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

0グッド

2クリップ

投稿2016/02/06 15:03

Java SE7 Silver の資格を目指し勉強中です。
分からない点は
・12行目のtoStringメソッドの使う意味(意義)と使い方です。

回答では「オブジェクトを追加した場合、appendメソッドは、そのオブジェクトのtostringメソッドを呼び出し、オブジェクトの文字列表現を文字列に追加する」とありました。また、「toStringメソッドはobjectクラスに定義されたメソッドであるため、すべてのクラスが持っています。toStringメソッドがどのような文字列を戻すかはクラスによって異なるため、このメソッドはオーバーライドして利用する」とありました。

「toStringメソッドがどのような文字列を戻すかはクラスによって異なる」とは、このクラスの場合はobjectクラスとどのように異なっているのでしょうか。(何をどのようにオーバーライドしているのでしょうか)

そもそも、staticメソッドなので、System.out.println(sb.tostring()); は、いらないのではと疑問です。
要領を得ない質問ですが宜しく願いします。

1 public class Main{
2 public static void main(String@: args){
3 StringBuilder sb = new StringBuilder();
4 sb.append(true);
5 sb.append(10);
6 sb.append('a');
7 sb.append("bcdef", 1, 3);

9 cha[] array = {'h','e','l','l','o'}
10 sb.append(array);
11
12 System.out.println(sb.toString());
13 }
14 }

回答は「true10acdhello」です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

そもそもObjectクラスでのtoStringの動作は、「クラス名@ハッシュコード(機械が決めた16進数の英数字)」という形式の文字列を返すことになっています。toStringメソッドはその名の通り「文字列化する」というメソッドで、そのオブジェクトが指す中身を簡潔に表現する文字列を返すよう設計することを推奨されています。この元の形のままでは人間が使いやすい形ではないので、人が扱いやすい情報を表す文字列を返すように設計するのです。

このクラスの場合はobjectクラスとどのように異なっているのでしょうか。

StringBuilderのtoStringメソッドは、StringBuilderの持つ文字列を元に新たなStringオブジェクトを生成して返します。

そもそも、staticメソッドなので、System.out.println(sb.tostring()); は、いらないのではと疑問です。

どれを指してstaticメソッドと呼んでいるのかわかりませんが、toStringメソッドはstaticメソッドではありません。

投稿2016/02/06 15:16

swordone

総合スコア20651

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

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

k_mail

2016/02/06 15:27

言葉不足で申し訳ありません。 2行目のpublic static void main(String@: args){ にstaticがついているのでオブジェクトを作ったり、 System.out.println(sb.toString()); と書く必要がないのではと思いました。 これは、何かと勘違いしているのでしょうか。
swordone

2016/02/06 15:40

staticメソッドは、そのクラスのインスタンスを生成せずに使用できるメソッドです。この場合、Mainクラスのインスタンスが不要なだけです。
k_mail

2016/02/06 15:55

クラスのインスタンスを不要にするのがstaticメソッドなんですね。 説明が笑ってしまうほどわかりやすいです。 夜遅くまでありがとうございました。
swordone

2016/02/06 16:21

ちなみにprintlnメソッドは、オブジェクトを受け取った場合、(そのオブジェクトがnullでなければ)そのオブジェクトのtoStringメソッドの結果を出力するメソッドです。
k_mail

2016/02/07 09:48

「StringBuilderのtoStringメソッドは、StringBuilderの持つ文字列を元に新たなStringオブジェクトを生成して返します。」ということですが、 前回の質問である「 Java StringBuilder が分かりません 」や public class Main{ public static void main(String[] args){ StringBuilder sb = new StringBuilder("abc"); sb.append("de").insert(2, "g"); System.out.println(sb;)    //回答はabgcdeです では、人が扱いやすい情報を表す文字列を返すように設計するtoStringの記述がないのは なぜでしょうか。
swordone

2016/02/07 09:52

一つ上のコメントに書きましたが、printlnメソッドにsb(StringBuilderのオブジェクト)が渡ると、sbがnullでない限り、sb.toString()の結果を出力する仕組みなのです。 なので、あえて書いていないだけです。違いがあるとすれば、sbがnullの時にsb.toString()すると例外が発生してしまうという点です(nullになっているsbをprintlnに渡した場合、"null"という文字列が出力される)
k_mail

2016/02/07 10:04

ご返信ありがとうございます。 すごく速いですね。 「printlnメソッドにsb(StringBuilderのオブジェクト)が渡ると、sbがnullでない限り、sb.toString()の結果を出力する仕組みなのです」ね。 非常に助かりました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問