13

私が使用するSystem.out.println(obj.getClass())と、エラーは発生しません。私が理解していることからgetClass()、クラス型を返します。文字列のみを出力するのでprintln()、クラスの代わりに文字列printlnを取得するのはなぜですか?

4

4 に答える 4

19

Java のすべてのオブジェクトは、クラスObjectから継承します。そのドキュメントを見ると、オブジェクトを文字列に変換Objectするメソッドが指定されていることがわかります。toStringすべての非プリミティブ型 ( Classes を含む) はs であるため、そのメソッドObjectを使用して何でも文字列に変換できます。toString

クラスは、このメソッドをオーバーライドして、文字列に変換する独自の方法を提供できます。たとえば、StringクラスをオーバーライドObject.toStringしてそれ自体を返します。Classクラスの名前を返すようにオーバーライドします。これにより、オブジェクトの出力方法を指定できます。

于 2013-05-05T14:24:51.530 に答える
4

コードを参照してください:

787     public void println(Object x) {
788         String s = String.valueOf(x);
789         synchronized (this) {
790             print(s);
791             newLine();
792         }
793     }

に注意してくださいString.valueOf(x)

良い質問をするためのボーナス:

632     public void print(String s) {
633         if (s == null) {
634             s = "null";
635         }
636         write(s);
637     }

そのためnull、オブジェクトが null の場合に出力されます:)

于 2013-05-05T14:29:46.777 に答える