如何避免 URL.equals 需要在 Java 中访问互联网?

How to avoid, that URL.equals needs access to the internet in Java?

提问人:Mnementh 提问时间:11/13/2008 最后编辑:Bill the LizardMnementh 更新时间:7/19/2015 访问量:2658

问:

Java 类库中 URL 类的方法发出 DNS 请求以获取主机名的 IP,以检查两个 IP 是否相等。即使对于从同一 .有没有办法避免这种互联网访问?equals()String

Java URL DNS 等于 平等

评论


答:

1赞 C. K. Young 11/13/2008 #1

不要使用 URL.equals。正如文档所说,

注意:已知定义的行为与HTTP中的虚拟主机不一致。equals

评论

0赞 Mnementh 11/13/2008
我应该如何测试是否相等?
2赞 C. K. Young 11/13/2008
您可以使用 toString() 或 toExternalForm() 来获取外部表单,并进行比较。此处的初步测试表明它不访问 DNS。
0赞 C. K. Young 11/13/2008
我刚刚对比尔的回答投了赞成票。只需在 URL 对象上调用 toURI() 即可。
3赞 Rick 11/13/2008 #2

如果您只想比较 url 字符串,请尝试

url1.toString().equals(url2.toString())

评论

0赞 Bill the Lizard 11/13/2008
这两个字符串可能大不相同,但指向同一资源。
4赞 Rick 11/13/2008
如果要检查 URL 引用的资源,显然需要 Internet 访问。因此,我假设他想比较 url 本身。因此,我的限定条件是“如果您只想比较 url 字符串”。
20赞 Bill the Lizard 11/13/2008 #3

使用 java.net.URI 而不是 URL。

评论

2赞 Gareth 11/13/2008
当然,这在语义上也很有意义,因为您要比较标识符而不是位置