0

次のステートメントは、URL クラスのインスタンスを作成し、それを「url」変数に入力し、最初の引数 (http://www.stackoverflow.com) を非静的属性に入力します。

URL url = new URL("http://www.stackoverflow.com");

属性を取得するためにインスタンス参照を直接ではなく get メソッドを指す必要があるのに、次のステートメントで属性値を取得できるのはなぜですか?:

1 可能なこと (おそらく) すべきではないこと:

String urlstr = url.toString();

2 本来あるべき姿:

String urlstr = url.getUrl();
4

4 に答える 4

2
String urlstr = url.toString();

URL のソース コードを見ると、メソッドが , ,をにtoString()追加し、表現を返すことがわかります。protocolauthoritypathqueryStringBufferString

これは、 を呼び出すことtoString()で任意のプロパティにアクセスできることを意味するものではありません。実際にプロパティにアクセスするには、pathを呼び出す必要があります。この場合、渡した初期化パラメータのように見える人間が読める形式を提供するだけです。getPathtoString

一般的な注意として、これtoStringは通常、人間が読める情報を提供できるデバッグ目的で使用されます。デフォルトでは、 toString()className とハッシュコードが提供されます。

于 2012-06-11T09:08:58.460 に答える
1

インスタンスのprintlnを実行し、それが属性のように見えるため、おそらく混乱しています。

その理由は、println(または文字列連結)がURLのtoStringメソッドを呼び出すためです。この特定のケースでは、URLが期待するものを再構築します。

于 2012-06-11T08:57:13.200 に答える
0

ここでtoStringは魔法をかけています。ここで暗黙的な型キャストが可能かどうかはわかりませんが、URLのtoStringメソッドを見ると、このオブジェクトが指すURLを出力していることがわかります。

于 2012-06-11T09:02:10.493 に答える
0

技術的には、System.out.println(a); を実行すると、a の toString() メソッドが呼び出されます...オート ボクシングが可能であるのと同じように、それが可能であると言っています。残念ながら、この方法を使用したことはありませんが、少なくとも実行可能であることはわかっています。

于 2012-06-11T08:59:19.717 に答える