H30  春期  午後試験 Java  問3について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
keiさん  
(No.1)
問3で本サイトの解説を読んだのですが理解できなかったので質問させていただきます。
System.out.println(new Subtraction(two, five)) とした場合、Subtraction インスタンスの toString() メソッドを呼び出します。と書いてあるのですが、なぜnew Substraction(two,five)で呼び出せるのかいまいち理解できません。なぜなのでしょうか?教えてください
2022.08.23 19:10
nsさん 
FE シルバーマイスター
(No.2)
System.out.println()メソッドにオブジェクトを渡した場合、String.valueOf(渡されたオブジェクト)によって暗黙のうちにString型に変換されます。
String.ValueOf()メソッドでは引数がnullでなければオブジェクトのtoString()メソッドを呼び出します。
・・・・というような感じだったと思います。
2022.08.23 22:47
おとかさん 
(No.3)
Javaの全てのクラスは、必ずObjectクラスを継承していることが保証されています。

それと同時に、javaで登場する全てのものは、何らかのクラスに所属してます。これはオブジェクト指向であるJavaの特徴でもあり、数字型やBoolean型もObkectがたを継承してますし、自作クラスも自動的に継承されます。

本題に入りますと、Objectクラスは、元々既にいくつかの便利メソッドを持ってます。それらの中の一つにtoString()メソッドがあります。

何も定義してない場合は、ObjectクラスのtoString()が表示されます。これは、文字列型であれば文字列が、Booleanであればtrueかfalse、そして自作クラスであればクラス名(アットマーク)ランダムな英数字(ハッシュ値みたいなものです)となります。ハッシュ値に関しては午前問題のベーステクノロジを参照ください。

もちろんこのtoStringはオーバーライドすることが出来ます((アットマーク)Overrideアノテーションは不要であることに注意してください)

他にも、equals()やhashCode()等、様々なメソッドが定義されてます。詳細は公式のoracleドキュメントのObjectクラスについてをご覧下さい(制限上url貼れないためリンクは割愛



※注意、int型もtoString()出来ますが、呼び出す場合はインスタンスを取得する必要があります。そのため

Integer number=5;

と言ったような宣言か、もしくは既存な変数ある場合は
Integer reNumber = number;
とする必要があります
2022.08.27 22:21
おとかさん 
(No.4)
説明が足りなかったので追記です。
System.out.println()は、実は全ての方が文字列に変換された上で表示されてます。全てのクラスにtoStringが実装されてる理由はこのためです。
2022.08.27 22:24

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop