楼主: braveone

这道题的答案是什么?

[复制链接]
论坛徽章:
4
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2009-05-27 11:36:49
11#
发表于 2007-8-31 17:47 | 只看该作者
楼上用什么工具了?, 我这里debug仍然是4啊

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
12#
发表于 2007-8-31 18:21 | 只看该作者
就eclipse啊

使用道具 举报

回复
论坛徽章:
4
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2009-05-27 11:36:49
13#
发表于 2007-8-31 18:42 | 只看该作者
最初由 justforregister 发布
[B]就eclipse啊 [/B]

你用的jdk是哪个版本?
结果仍然是4,问题出现在URL这个类,
URL url1 = new URL(URL_NAMES[0]);
URL url2 = new URL(URL_NAMES[1]);

if(url1.equals(url2)){
     System.out.println("yes";
}else
    System.out.println("no ";

输出yes

我跟进JDKSRC看了一下,因为这两个url除了url.host不一样外其他都一样
输出url1.host()和url2.host()肯定是不相等的,但是i(url1.equals(url2))执行这个语句的时候,url类里比较host(因为在这里其他信息都相等),有个hostsEqual(u1, u2)方法,表面上看不相等,但恰恰相等了,这是因为这两个url的IP地址是一样的,cmd 运行ping url 试一下,说明jdk url 类 host比较时用了IP不是host串

使用道具 举报

回复
论坛徽章:
4
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2009-05-27 11:36:49
14#
发表于 2007-8-31 19:00 | 只看该作者
最初由 justforregister 发布
[B]就eclipse啊 [/B]


太刺激了
楼上偶说的有点误
我把网线拔了,执行了一下,令人吃惊的效果
结果是 和你所说的结果一样
所以肯定:
1 在联网时比较的是new Url(url).equals() 时的对应IP地址
2 不联网时直接比较host串

因为
"http://javapuzzlers.com"
"http://apache2-snort.skybar.dreamhost.com"
这两个url的ip地址是一样,但host不相等的
所以
连网时这2个相等和不连网的情况下执行结果是不相等的

使用道具 举报

回复
论坛徽章:
4
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2009-05-27 11:36:49
15#
发表于 2007-8-31 19:01 | 只看该作者
justforregister
同志的在eclipse的电脑估计是断网的吧

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
16#
发表于 2007-8-31 19:54 | 只看该作者
最初由 okone96 发布
[B]justforregister
同志的在eclipse的电脑估计是断网的吧 [/B]

待会在 看看

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2007-9-1 20:23 | 只看该作者
for (String urlName : URL_NAMES)
                            favorites.add(new URL(urlName));


for (String urlName :URL_NAMES){
          URL url = new URL(urlName);
          System.out.println("URL:"  + URL  + " --- > " + url.hashcode()) ;
          favorites.add(url);
}

打印出hashcode就清楚了, URL 类的hashcode 的实现的 bug

使用道具 举报

回复
论坛徽章:
0
18#
发表于 2007-9-1 20:33 | 只看该作者
和okone说的一样

偶google下,发现原来是javaone 演讲的东东的 ...
http://java.sun.com/javaone/sf/2007/articles/puzzlers.jsp

The second puzzle, aptly titled "More Joys of Sets" has the user create HashMap keys that consist or several URL objects. Again, most of the audience was unable to guess the correct answer.

The important thing the audience learned here is that the URL object's equals() method is, in effect, broken. In this case, two URL objects are equal if they resolve to the same IP address and port, not just if they have equal strings. However, Bloch and Pugh point out an even more severe Achilles' Heel: the equality behavior differs depending on if you're connected to the network, where virtual addresses can resolve to the same host, or if you're not on the net, where the resolve is a blocking operation. So, as far as lessons learned, they recommend:

    * Don't use URL; use URI instead. URI makes no attempt to compare addresses or ports. In addition, don't use URL as a Set element or a Map key.
    * For API designers, the equals() method should not depend on the environment. For example, in this case, equality should not change if a computer is connected to the Internet versus standalone.

使用道具 举报

回复
论坛徽章:
19
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44复活蛋
日期:2013-04-16 12:11:10迷宫蛋
日期:2012-11-14 19:05:48奥运会纪念徽章:艺术体操
日期:2012-10-09 08:49:14奥运会纪念徽章:现代五项
日期:2012-09-29 09:36:00奥运会纪念徽章:垒球
日期:2012-06-15 22:56:49茶鸡蛋
日期:2012-04-12 13:53:30ITPUB学员
日期:2012-04-10 09:21:002012新春纪念徽章
日期:2012-01-04 11:51:22紫蛋头
日期:2011-06-20 13:29:45
19#
 楼主| 发表于 2007-9-1 22:16 | 只看该作者
太强了,知道这道题决不简单,没有想到如此复杂。

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
20#
发表于 2007-9-1 22:20 | 只看该作者
学习了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表