回答編集履歴

5

頭の方でまとめを列挙。

2021/09/11 02:11

投稿

dodox86
dodox86

スコア9267

test CHANGED
@@ -16,7 +16,21 @@
16
16
 
17
17
 
18
18
 
19
+ 色々な疑問が湧いてしまったようですが、それぞれは関連していて、また、Javaと言うプログラミング言語を理解するきっかけとしてもとても良いものだと思います。話が前後するかたちになりますが、説明の前にポイントをまとめておきましょうか。
20
+
21
+
22
+
23
+ - 全てのクラスは`Object`クラスの派生クラスであり、`toString`メソッドを持っている。
24
+
25
+ - Java APIでは、`toString`がそのクラス相応の文字列を返すようオーバーライドによって再実装されているものがある。`String`クラスはその最たる代表と言える。
26
+
27
+ - `System.out.println`メソッドの実体は、標準出力の`PrintStream.println`である。 `PrintStream.println`は、`String`クラス並びに根幹である`Object`クラスをも引数と取る各種のオーバーロード版のメソッドがある。
28
+
29
+ - `PrintStream.println`メソッドは、その処理の中で引数に対して`valueOf`メソッドや`toString()`メソッドを適時実行し、文字列を出力する
30
+
31
+
32
+
19
- まず、`System.out.println`メソッドのリファレンスを見てみます。
33
+ です。では見ていきしょう。まず、疑問の発端となった`System.out.println`メソッドのリファレンスを見てみます。
20
34
 
21
35
  [System.out.println](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/System.html#out) から辿って[PrintStream#println](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println--)に行き着きます。引数の型ごとにいくつもオーバーロードされた`println`がありますが、`System.out.println(a)`を実行した場合に呼ばれるメソッドは、`a`は`String`クラスなので、[public void println(String x)](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println-java.lang.String-) です。`String`ではない別のクラスであれば、`Object`クラスの変数を引数とする [public void println(Object x)](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println-java.lang.Object-)が呼ばれます。このメソッドに関してリファレンスには次のように書いていますね。
22
36
 

4

文を修正

2021/09/11 02:11

投稿

dodox86
dodox86

スコア9267

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  まず、`System.out.println`のメソッドのリファレンスを見てみます。
20
20
 
21
- [System.out.println](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/System.html#out) から辿って[PrintStream#println](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println--)に行き着きます。引数の型ごとにいくつもオーバーロードされた`println`がありますが、`System.out.println(a)`を実行した場合に呼ばれるメソッドは、`a`はこの場合`String`なので、[public void println(String x)](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println-java.lang.String-) が呼ばれます。`String`ではない別のクラスであれば、`Object`クラスの変数を引数とする `public void println(Object x)` が呼ばれます。このメソッドに関してリファレンスには次のように書いていますね。
21
+ [System.out.println](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/System.html#out) から辿って[PrintStream#println](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println--)に行き着きます。引数の型ごとにいくつもオーバーロードされた`println`がありますが、`System.out.println(a)`を実行した場合に呼ばれるメソッドは、`a`は`String`クラスなので、[public void println(String x)](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println-java.lang.String-) す。`String`ではない別のクラスであれば、`Object`クラスの変数を引数とする [public void println(Object x)](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println-java.lang.Object-)が呼ばれます。このメソッドに関してリファレンスには次のように書いていますね。
22
22
 
23
23
 
24
24
 

3

誤りを修正

2021/09/10 21:29

投稿

dodox86
dodox86

スコア9267

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  まず、`System.out.println`のメソッドのリファレンスを見てみます。
20
20
 
21
- [System.out.println](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/System.html#out) から辿って[PrintStream#println](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println--)に行き着きます。引数の型ごとにいくつもオーバーロードされた`println`がありますが、`System.out.println(a)`を実行した場合に呼ばれるメソッドは、`Object`クラスの変数を引数とする `public void println(Object x)` す。リファレンスには、次のように書いていますね。
21
+ [System.out.println](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/System.html#out) から辿って[PrintStream#println](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println--)に行き着きます。引数の型ごとにいくつもオーバーロードされた`println`がありますが、`System.out.println(a)`を実行した場合に呼ばれるメソッドは、`a`はこの場合`String`なので、[public void println(String x)](https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println-java.lang.String-) が呼ばれます。`String`ではない別のクラスであれば、`Object`クラスの変数を引数とする `public void println(Object x)` が呼ばれます。このメソッドに関してリファレンスには、次のように書いていますね。
22
22
 
23
23
 
24
24
 

2

実行例の内容を追記

2021/09/10 21:22

投稿

dodox86
dodox86

スコア9267

test CHANGED
@@ -150,7 +150,17 @@
150
150
 
151
151
 
152
152
 
153
- ```terminal
153
+ ```CMD
154
+
155
+ C>java --version
156
+
157
+ java 11.0.9 2020-10-20 LTS
158
+
159
+ Java(TM) SE Runtime Environment 18.9 (build 11.0.9+7-LTS)
160
+
161
+ Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.9+7-LTS, mixed mode)
162
+
163
+
154
164
 
155
165
  C>java --source 8 Main.java
156
166
 

1

誤記修正

2021/09/10 21:13

投稿

dodox86
dodox86

スコア9267

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- つまり、`System.out.println(a)` は、そのメソッドの中で `a.toString()`を実行しています。`toString()`メソッドとは何でしょう。これは、Javaのすべてのクラスの根本である[java.lang.Object](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html)ラス必ず実装しているメソッドです。[Object#toString](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html#toString--)デフォルトの実装では`toString()`は単純に参照の値を出力するようものですが、`String`クラスはこれをオーバーライドして、自身が管理している文字列を出力するようになっています。`String`クラスが担う役割を考えると、適当ですね。
37
+ つまり、`System.out.println(a)` は、そのメソッドの中で `a.toString()`を実行しています。`toString()`メソッドとは何でしょう。これは、Javaのすべてのクラスの根本である[java.lang.Object](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html)ラスが持つ、最低限の機能を必ず実装しているメソッドです。[Object#toString](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html#toString--)デフォルトの実装では`toString()`は単純に参照の値を出力するようものですが、`String`クラスはこれをオーバーライドして、自身が管理している文字列を出力するようになっています。`String`クラスが担う役割を考えると、適当ですね。
38
38
 
39
39
 
40
40