!= служит для сравнения ссылок и примитивных типов. Есть конечно исключения, как в случае с Integer и некоторым форматом строк, но не суть.
Значения объектов сравниваются при помощи equals.
Логично. В первом случае вы использовали операцию “не”, а во втором - нет. Чего вы ожидали от ассерта, который всегда получает false? URL то не равны. Значит использовать вы должны либо assertFalse, либо !url1.equals(url2);
Могу еще добавить, что обычные String'и лучше ассертить при помощи assertEquals(message, expected, actual). Тогда, если тест упадет, вы увидите не просто фейл ассерта и меседж, а еще и читаемое сообщение вроде expected abc[d], but was: abc[e]