17 grudnia
15:14 2007
import java.net.*;
import java.util.*;
public class Test {
public static void main(String[] args) throws MalformedURLException {
HashSet<URL> set = new HashSet<URL>();
set.add(new URL("http://jogger.pl"));
set.add(new URL("http://techblog.pl"));
set.add(new URL("http://jogger.pl"));
set.add(new URL("http://google.pl"));
System.out.println(set.size());
}
}
Jaką wartość wyświetli println na końcu programu? Jeśli myślisz że 4 lub 3, to się mylisz.. :)
Inne "ciekawostki" można obejrzeć na tej ponad godzinnej prezentacji: Advanced Topics in Programming Languages: Java Puzzlers
Generalnie można to podsumować krótko: Używaj FindBugs, żeby znaleźć wszystkie upierdliwe błędy, których normalnie byś nie zauważył :)
Proszę o komentarz
To co wyświetli? :)
2
„2” ponieważ jogger.pl i techblog.pl ma ten sam IP, więc liczy się jako jeden (zasadzkas #1).
Zasadzkas #2: Metody equals i hashCode URL-a używają sieci, więc mogą baaaaardzo spowolnić program. Bonusowa zasadzka #3: program może też wyświetlić „3”, jeśli masz akurat wyłączony internet.. Na szczęście użycie URI zamiast URL naprawia wszystkie te problemy :)
Naciąłem się na to przy pracy inżynierskiej, więc wiedziałem jaki tu jest szwindel ;) Byłem bardzo niezadowolony, kiedy odkryłem dlaczego program mi się „zacina”. Właściwie bardziej to zdegustowany ;)