Чтобы сравнить 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
}
}
Ответы
Ответ 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
эквивалентны.