Java 要比较 UUID,我可以使用 == 还是必须使用 UUID.equals(UUID)?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23589058/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 00:11:03  来源:igfitidea点击:

To compare UUID, can I use == or have to use UUID.equals(UUID)?

java

提问by Newyacht Zhang

Just start using java.util.UUID. My question is if I have two UUID variables, say u1 and u2, and I would like to check if they are equal, can I safely use expression u1 == u2or have to write u1.equals(u2)? assuming both are not null.

刚开始使用java.util.UUID。我的问题是,如果我有两个 UUID 变量,比如 u1 和 u2,我想检查它们是否相等,我可以安全地使用表达式u1 == u2还是必须写u1.equals(u2)?假设两者都不为空。

BTW, I am using its randomUUIDmethod to create new UUID values, but I think this should not be matter. I wonder as UUID is unique, each value could be a singleton, then it is safe to use u1 == 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
   }
}

采纳答案by user253751

It depends: which type of equality do you want?

这取决于:您想要哪种类型的平等?

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 == bis true only if aand bare the same object. If they are two identical objects, it will still be false.

a == b仅当ab是同一个对象时才为真。如果它们是两个相同的对象,它仍然是假的。

a.equals(b)is true if aand bare the same UUID value - if their two parts are the same.

a.equals(b)如果ab是相同的 UUID 值 - 如果它们的两个部分相同,则为真。

回答by Makoto

Well...no.

嗯……不。

==against an object checks for reference equality. That is, it checks to see if these two objects are literally the same spot in memory.

==针对对象检查引用相等性。也就是说,它会检查这两个对象是否在内存中实际上是同一个位置。

.equals()will check for actual object equivalence. And, the Javadoc for UUIDgoes into great detail to explain when two UUIDinstances are equivalent.

.equals()将检查实际的对象等效性。并且,Javadoc forUUID非常详细地解释了何时两个UUID实例是等效的。