Подтвердить что ты не робот

Чтобы сравнить UUID, могу ли я использовать == или использовать UUID.equals(UUID)?

Просто начните использовать java.util.UUID. Мой вопрос: если у меня есть две переменные UUID, скажем u1 и u2, и я бы хотел проверить, равны ли они, могу ли я безопасно использовать выражение u1 == u2 или написать u1.equals(u2)? предполагая, что оба значения не равны нулю.

Кстати, я использую свой метод randomUUID для создания новых значений UUID, но я думаю, что это не должно иметь значения. Интересно, как UUID уникален, каждое значение может быть одноточечным, тогда безопасно использовать u1 == u2.

void method1(UUID u1, UUID u2) {

   // I know it is always safe to use equal method
   if (u1.equals(u2)){ 
     // do something
   }

   // is it safe to use  ==
   if (u1 == u2) {
     // do something
   }
}
4b9b3361

Ответ 1

Это зависит: какой тип равенства вы хотите?

UUID a = new UUID(12345678, 87654321);
UUID b = new UUID(12345678, 87654321);
UUID c = new UUID(11111111, 22222222);

System.out.println(a == a); // returns true
System.out.println(a.equals(a)); // returns true

System.out.println(a == b); // returns false
System.out.println(a.equals(b)); // returns true

System.out.println(a == c); // returns false
System.out.println(a.equals(c)); // returns false

a == b истинно, только если a и b являются одним и тем же объектом. Если это два одинаковых объекта, они все равно будут ложными.

a.equals(b) истинно, если a и b - одно и то же значение UUID - если их две части одинаковы.

Ответ 2

Ну... нет.

== против проверки объекта для ссылочного равенства. То есть, он проверяет, являются ли эти два объекта буквально одним и тем же пятном в памяти.

.equals() будет проверять фактическую эквивалентность объекта. И Javadoc для UUID подробно объясняет, когда два экземпляра UUID эквивалентны.