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() を実行すれば