先看道題吧:
package com.lk.C;import java.net.MalformedURLException;import java.net.URL;import java.util.HashSet;import java.util.Set;public class Test3 { PRivate static final String [] URLNAMES = { "http://www.sina.com",//202.108.33.94 "http://www.nuw.edu.cn",//124.115.173.252 "http://javapuzzlers.com",//208.97.154.9 "http://www.google.com",//64.233.189.147 "http://Javapuzzlers.com",//208.97.154.9 "http://apache2-snort.skybar.dreamhost.com"http://208.97.154.9 }; public static void main(String[] args) throws MalformedURLException { // TODO Auto-generated method stub Set<URL> favorites = new HashSet<URL>(); for(String urlName : URLNAMES){ favorites.add(new URL(urlName)); } System.out.println(favorites.size()); }}
輸出什么?
答案:
在聯(lián)網(wǎng)的狀態(tài)下會輸出4,這是由于URL的equals比對方式。根據(jù)equals的文檔說明:如果兩個主機名可解析為同一ip地址,則認為兩個主機相同(即使主機名不等);如果有一個主機名無法解析,但這兩個主機名相等(不區(qū)分大小寫),或者兩個主機名都為null,則也認為這兩個主機相同。
也就是說,如果兩個URL的IP地址是相同的,那么這兩個URL就是相等的。
如果在斷網(wǎng)時,這些都是無法解析成為IP地址的,這是就要判斷URL的名字,僅認為名字相同時才是相同URL(不區(qū)分大小寫),所以輸出是5。
所以:不要把URL應用與Set和Map的key中,可以使用URI來代替,這樣就不存在網(wǎng)絡問題了。
新聞熱點
疑難解答