0

以下语句创建 URL 类的实例,将其填充到“url”变量中,并将第一个参数 (http://www.stackoverflow.com) 填充到非静态属性中:

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

当您真的应该指向获取属性而不是直接指向实例引用时,为什么可以使用以下语句获取属性值?:

1 什么是可能的,但(也许)不应该是:

String urlstr = url.toString();

2 它应该是怎样的:

String urlstr = url.getUrl();
4

4 回答 4

2
String urlstr = url.toString();

如果您查看 URL 的源代码,您会看到该方法在 an 中toString()附加protocol, authority, path,并返回表示形式。queryStringBufferString

这绝不意味着您可以通过调用来访问任何属性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

从技术上讲,当您执行 System.out.println(a); a 的 toString() 方法被调用...我是说它可以做到,就像可以做自动装箱一样。不幸的是,我从未使用过这种方法,但至少你知道它是可行的。

于 2012-06-11T08:59:19.717 回答
0

这里 toString 正在发挥作用。我不确定这里是否可以进行隐式类型转换,但是如果您查看 URL 的 toString 方法,您会发现它正在打印该对象指向的URL 。

于 2012-06-11T09:02:10.493 回答