タグ

ブックマーク / blog.scheakur.com (1)

  • java.net.URLの闇

    1つめの equals() は true を返します。2つめは不定です。true になることもありますし、false になることもあります。ネットワークにつながっていない環境で実行すれば必ず true になります。ネットワークにつながっている環境だと不定です。DNSに依存します。 これは java.net.URL の hashCode() の実装に起因するものです。 java.net.URL#hashCode() は実行時にネットワークアクセスして名前解決を行います。恐ろしい話です。 そして一旦計算した hashCode は java.net.URL オブジェクトにキャッシュされます。 また、名前解決の結果自体もキャッシュされています。キャッシュされる期間はデフォルトだと30秒です。 つまり、最初に名前解決をしてから30秒以内に java.net.URL#hashCode() を実行すれば

    Haaaa_N
    Haaaa_N 2018/04/29
    JavaのequalsでDNS実行の話URLの話だったか
  • 1