草庐IT

java - 在Java中为具有循环引用的对象实现equals和hashCode

我定义了两个类,它们都包含对另一个对象的引用。它们看起来与此类似(这是简化的;在我的真实域模型中,A包含一个B列表,每个B都有一个对父A的引用):publicclassA{publicBb;publicStringbKey;@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((b==null)?0:b.hashCode());result=prime*result+((bKey==null)?0:bKey.hashCode());returnresult;}@Overridepub

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

开始使用java.util.UUID。我的问题是如果我有两个UUID变量,比如u1和u2,并且我想检查它们是否相等,我可以安全地使用表达式u1==u2还是必须编写u1.equals(u2)?假设两者都不为空。顺便说一句,我正在使用它的randomUUID方法来创建新的UUID值,但我认为这应该无关紧要。我想知道UUID是唯一的,每个值都可以是一个单例,那么使用u1==u2是安全的。voidmethod1(UUIDu1,UUIDu2){//Iknowitisalwayssafetouseequalmethodif(u1.equals(u2)){//dosomething}//isitsa

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

开始使用java.util.UUID。我的问题是如果我有两个UUID变量,比如u1和u2,并且我想检查它们是否相等,我可以安全地使用表达式u1==u2还是必须编写u1.equals(u2)?假设两者都不为空。顺便说一句,我正在使用它的randomUUID方法来创建新的UUID值,但我认为这应该无关紧要。我想知道UUID是唯一的,每个值都可以是一个单例,那么使用u1==u2是安全的。voidmethod1(UUIDu1,UUIDu2){//Iknowitisalwayssafetouseequalmethodif(u1.equals(u2)){//dosomething}//isitsa

java - 有没有 compareTo() 和 equals() 不一致的标准 Java 类?

我正在寻找compareTo()可以返回0而equals()返回false的所有标准Java类:Comparablecomparable1=???;Comparablecomparable2=???;assertcomparable1.compareTo(comparable2)==0;assert!comparable1.equals(comparable2);我只知道一个:newBigDecimal("1.0")等于newBigDecimal("1")使用compareTo()但不等于使用equals()。还有其他的吗?我对所有这些类都感兴趣,但仅限于公共(public)JavaA

java - 有没有 compareTo() 和 equals() 不一致的标准 Java 类?

我正在寻找compareTo()可以返回0而equals()返回false的所有标准Java类:Comparablecomparable1=???;Comparablecomparable2=???;assertcomparable1.compareTo(comparable2)==0;assert!comparable1.equals(comparable2);我只知道一个:newBigDecimal("1.0")等于newBigDecimal("1")使用compareTo()但不等于使用equals()。还有其他的吗?我对所有这些类都感兴趣,但仅限于公共(public)JavaA

java - 有没有办法检查两个集合是否包含相同的元素,与顺序无关?

我一直在寻找一种类似于Arrays.equals(a1,a2)的方法,但忽略了元素顺序。我无法在GoogleCollections(类似于Iterables.elementsEqual()之类的东西,但这确实说明了排序)和JUnit(assertEquals()中都找不到它只是在Collection上调用equals(),这取决于Collection的实现,这不是我想要的)这种方法最好采用Iterables,但我也可以简单地采用Collections这种方法当然会考虑到集合中的任何重复元素(因此它不能简单地测试containsAll())。请注意,我不是在问如何实现这样的东西,我只是想

java - 有没有办法检查两个集合是否包含相同的元素,与顺序无关?

我一直在寻找一种类似于Arrays.equals(a1,a2)的方法,但忽略了元素顺序。我无法在GoogleCollections(类似于Iterables.elementsEqual()之类的东西,但这确实说明了排序)和JUnit(assertEquals()中都找不到它只是在Collection上调用equals(),这取决于Collection的实现,这不是我想要的)这种方法最好采用Iterables,但我也可以简单地采用Collections这种方法当然会考虑到集合中的任何重复元素(因此它不能简单地测试containsAll())。请注意,我不是在问如何实现这样的东西,我只是想

java - 如何对 hashCode() 进行单元测试?

如何测试unittesting中的hashCode()函数?publicinthashCode(){intresult=17+hashDouble(re);result=31*result+hashDouble(im);returnresult;} 最佳答案 每当我重写equals和hash代码时,我都会按照JoshuaBloch在“EffectiveJava”第3章中的建议编写单元测试。我确保equals和hash代码是自反的、对称的和传递的。我还确保“不等于”适用于所有数据成员。当我检查对equals的调用时,我还确保hashC

java - 如何对 hashCode() 进行单元测试?

如何测试unittesting中的hashCode()函数?publicinthashCode(){intresult=17+hashDouble(re);result=31*result+hashDouble(im);returnresult;} 最佳答案 每当我重写equals和hash代码时,我都会按照JoshuaBloch在“EffectiveJava”第3章中的建议编写单元测试。我确保equals和hash代码是自反的、对称的和传递的。我还确保“不等于”适用于所有数据成员。当我检查对equals的调用时,我还确保hashC

java - 为什么 Java 不允许在枚举中覆盖 equals(Object)?

我注意到以下代码段...@Overridepublicbooleanequals(ObjectotherObject){...}...不允许用于枚举,因为方法equals(Objectx)在Enum中被定义为final.为什么会这样?我想不出任何需要为Enum覆盖equals(Object)的用例。我只是想知道这种行为背后的原因。 最佳答案 除了returnthis==other之外的任何东西都会违反直觉并违反theprincipleofleastastonishment.当且仅当它们是同一个对象并且覆盖此行为的能力容易出错时,两个